home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / cpphtp2 / cpphtp2.jar / chpt_02.gml < prev    next >
Text File  |  1998-03-03  |  280KB  |  6,854 lines

  1. <html>
  2. <chapter>
  3. <section type=Popup name=Quotes title="Quotes">
  4. <page>
  5. <i>Let's all move one place 
  6. on.</i> <br>
  7. Lewis Carroll<br>
  8. <br>
  9.  
  10. </page>
  11. <page>
  12. <i>The wheel is come full 
  13. circle.</i> <br>
  14. William Shakespeare, 
  15. King Lear<br>
  16. <br>
  17.  
  18. </page>
  19. <page>
  20. <i>Who can control his fate?</i> <br>
  21. William Shakespeare, 
  22. Othello<br>
  23. <br>
  24.  
  25. </page>
  26. <page>
  27. <i>The used key is always 
  28. bright.</i> <br>
  29. Benjamin Franklin<br>
  30. <br>
  31.  
  32. </page>
  33. </section>
  34. <section type=Popup name=Answers title="Answers">
  35. <page pagename="Answer 2.1">
  36. <b>Answer 2.1</b><br>
  37. a) Sequence, selection, and repetition.<br>
  38. b) <b>if/else</b>.<br>
  39. c) Counter-controlled or definite.<br>
  40. d) Sentinel, signal, flag, or dummy.<br>
  41. <foreign  name="exercises" url="^Exercises::c:s0p0">
  42.  
  43. </page>
  44. <page pagename="Answer 2.2">
  45. <b>Answer 2.2</b><br>
  46. <font size=2><br></font><font size=11><pre>
  47. x = x + 1;<p>
  48. x += 1;<p>
  49. ++x;<p>
  50. x++;<p>
  51. </pre></font>
  52. <foreign  name="exercises" url="^Exercises::c:s0p2">
  53.  
  54. </page>
  55. <page pagename="Answer 2.2">
  56. <font size=18>Answer 2.3</font><br>
  57. <font size=2><br></font><font size=11><pre>
  58. a)  z = x++ + y;<p>
  59. b)  if ( count > 10 )<p>
  60.       cout << "Count is greater than 10" << endl;<p>
  61. c)  total -= --x;<p>
  62. d)  q %= divisor;<p>
  63. e)  q = q % divisor;<p>
  64. </pre></font>
  65. <foreign  name="exercises" url="^Exercises::c:s0p3">
  66.  
  67. </page>
  68. <page pagename="Answer 2.4">
  69. <b>Answer 2.4</b><br>
  70. <font size=2><br></font><font size=11><pre>
  71. a)  int sum, x;<p>
  72. b)  x = 1;<p>
  73. c)  sum = 0;<p>
  74. d)  sum += x; or sum = sum + x;<p>
  75. e)  cout << "The sum is: " << sum << endl;<p>
  76. </pre></font>
  77. <foreign  name="exercises" url="^Exercises::c:s0p4">
  78.  
  79. </page>
  80. <page pagename="Answer 2.5">
  81. <b>Answer 2.5</b><br>
  82.  
  83. <font size=14><pre>
  84.  1 // Calculate the sum of the integers from 1 to 10 <p>
  85.  2 #include <iostream.h><p>
  86.  3 <p>
  87.  4 int main()<p>
  88.  5 {<p>
  89.  6    int sum, x;<p>
  90.  7    x = 1;<p>
  91.  8    sum = 0;<p>
  92.  9    while ( x <= 10 ) {<p>
  93.  10       sum += x;<p>
  94.  11       ++x;<p>
  95. </pre></font>
  96. <foreign  name="exercises" url="^Exercises::c:s0p5">
  97.  
  98. </page>
  99. <page pagename="Answer 2.5">
  100. <font size=14><pre>
  101.  12    }<p>
  102. </pre></font>
  103. <font size=14><pre>
  104.  13    cout << "The sum is: " << sum << endl;<p>
  105.  14    return 0;<p>
  106.  15 }<p>
  107. </pre></font>
  108. <foreign  name="exercises" url="^Exercises::c:s0p5">
  109.  
  110. </page>
  111. <page pagename="Answer 2.6">
  112. <b>Answer 2.6</b><br>
  113. <font size=2><br></font><font size=11><pre>
  114. a)  product = 25, x = 6;<p>
  115. b)  quotient = 0, x = 6;<p>
  116. </pre></font>
  117. <foreign  name="exercises" url="^Exercises::c:s0p6">
  118.  
  119. </page>
  120. <page pagename="Answer 2.7">
  121. <b>Answer 2.7</b><br>
  122. <font size=2><br></font><font size=11><pre>
  123. a)  cin >> x;<p>
  124. b)  cin >> y;<p>
  125. c)  i = 1;<p>
  126. d)  power = 1;<p>
  127. e)  power *= x; or power = power * x;<p>
  128. f)  y++;<p>
  129. g)  if ( y <= x )<p>
  130. h)  cout << power << endl;<p>
  131. </pre></font>
  132. <foreign  name="exercises" url="^Exercises::c:s0p7">
  133.  
  134. </page>
  135. <page pagename="Answer 2.8">
  136. <b>Answer 2.8</b><br>
  137.  
  138. <font size=14><pre>
  139.  1 // raise x to the y power<p>
  140.  2 #include <iostream.h><p>
  141.  3 int main()<p>
  142.  4 {<p>
  143.  5    int x, y, i, power;<p>
  144.  6 <p>
  145.  7    i = 1;<p>
  146.  8    power = 1;<p>
  147.  9    cin >> x;<p>
  148.  10    cin >> y;<p>
  149.  11 <p>
  150. </pre></font>
  151. <foreign  name="exercises" url="^Exercises::c:s0p8">
  152.  
  153. </page>
  154. <page pagename="Answer 2.8">
  155. <font size=14><pre>
  156.  12    while ( i <= y ) {<p>
  157. </pre></font>
  158. <font size=14><pre>
  159.  13       power *= x;<p>
  160.  14       ++i;<p>
  161.  15    }<p>
  162.  16 <p>
  163.  17    cout << power << endl;<p>
  164.  18    return 0;<p>
  165.  19 }<p>
  166. </pre></font>
  167. <foreign  name="exercises" url="^Exercises::c:s0p8">
  168.  
  169. </page>
  170. <page pagename="Answer 2.9">
  171. <b>Answer 2.9</b><br>
  172. a)  Error: Missing the closing right brace of the <b>while</b> body. <br>
  173.      Correction: Add closing right brace after the statement <b>++c;</b>.<br>
  174. b)  Error: Used stream insertion instead of stream extraction. <br>
  175.      Correction: Change <b><<</b> to <b>>></b>.<br>
  176. c)  Error: Semicolon after <b>else</b> results in a logic error. The second output 
  177. statement will always be executed.<br>
  178.      Correction: Remove the semicolon after <b>else</b>.<br>
  179. <foreign  name="exercises" url="^Exercises::c:s0p9">
  180.  
  181. </page>
  182. <page pagename="Answer 2.10">
  183. <b>Answer 2.10</b><br>
  184. The value of the variable<b> z</b> is never changed in the <b>while</b> structure. Therefore, if 
  185. the loop-continuation condition (<b>z >= 0</b>) is <b>true</b>, an infinite loop is created. To 
  186. prevent the infinite loop, <b>z</b> must be decremented so that it eventually becomes 
  187. less than 0.<br>
  188. <foreign  name="exercises" url="^Exercises::c:s0p10">
  189.  
  190. </page>
  191. <page pagename="Answer 2.11">
  192. <b>Answer 2.11</b><br>
  193. a)  False. The <b>default</b> case is optional. If no default action is needed, then there is 
  194. no need for a <b>default</b> case.<br>
  195. b)  False. The <b>break</b> statement is used to exit the <b>switch</b> structure. The <b>break</b> 
  196. statement is not required when the <b>default</b> case is the last case.<br>
  197. c)  False. Both of the relational expressions must be <b>true</b> in order for the entire 
  198. expression to be <b>true</b> when using the <b>&&</b> operator.<br>
  199. d)  True.<br>
  200. <foreign  name="exercises" url="^Exercises::c:s0p11">
  201.  
  202. </page>
  203. <page pagename="Answer 2.12">
  204. <b>Answer 2.12</b><br>
  205. <font size=2><br></font><font size=11><pre>
  206. a)  sum = 0;<p>
  207.     for ( count = 1; count <= 99; count += 2 <p>
  208.         sum += count;<p>
  209. b)  cout << setiosflags(ios::fixed | ios::showpoint | ios::left)<p>
  210.          << setprecision( 1 ) << setw( 15 ) << 333.546372<p>
  211.          << setprecision( 2 ) << setw( 15 ) << 333.546372 <p>
  212.          << setprecision( 3 ) << setw( 15 ) << 333.546372 <p>
  213.          << endl;<p>
  214. </pre></font>
  215. Output is:<br>
  216. <font size=2><br></font><font size=11><pre>
  217. 333.5          333.55         333.546<p>
  218. </pre></font>
  219. <foreign  name="exercises" url="^Exercises::c:s0p12">
  220.  
  221. </page>
  222. <page pagename="Answer 2.12">
  223. <font size=2><br></font><font size=11><pre>
  224. c)  cout << setiosflags( ios::fixed | ios::showpoint )<p>
  225. </pre></font>
  226. <font size=2><br></font><font size=11><pre>
  227.          << setprecision( 2 ) << setw( 10 ) << pow( 2.5, 3 )  <p>
  228.          << endl;<p>
  229. </pre></font>
  230. Output is:<br>
  231. <font size=2><br></font><font size=11><pre>
  232.      15.63<p>
  233. d)  x = 1;<p>
  234.     while ( x <= 20 ) {<p>
  235.        cout << x;<p>
  236.        if ( x % 5 == 0 )<p>
  237.           cout << endl;<p>
  238.        else<p>
  239. </pre></font>
  240. <foreign  name="exercises" url="^Exercises::c:s0p12">
  241.  
  242. </page>
  243. <page pagename="Answer 2.12">
  244. <font size=2><br></font><font size=11><pre>
  245.           cout << '\ ';<p>
  246. </pre></font>
  247. <font size=2><br></font><font size=11><pre>
  248.        x++;<p>
  249.     }<p>
  250. e)  for ( x = 1; x <= 20; x++ ) {<p>
  251.         cout << x;<p>
  252.         if ( x % 5 == 0 )<p>
  253.            cout << endl;<p>
  254.         else<p>
  255.            cout << '\ ';<p>
  256.     }<p>
  257. </pre></font>
  258. or<br>
  259. <foreign  name="exercises" url="^Exercises::c:s0p12">
  260.  
  261. </page>
  262. <page pagename="Answer 2.12">
  263. <font size=2><br></font><font size=11><pre>
  264.     for ( x = 1; x <= 20; x++ )<p>
  265. </pre></font>
  266. <font size=2><br></font><font size=11><pre>
  267.         if ( x % 5 == 0 )<p>
  268.            cout << x << endl;<p>
  269.         else<p>
  270.            cout << x << '\ ';<p>
  271. </pre></font>
  272. <foreign  name="exercises" url="^Exercises::c:s0p12">
  273.  
  274. </page>
  275. <page pagename="Answer 2.13">
  276. <b>Answer 2.13</b><br>
  277. a)  Error: The semicolon after the <b>while</b> header causes an infinite loop.<br>
  278.      Correction: Replace the semicolon by a { or remove both the ; and the }.<br>
  279. b)  Error: Using a floating-point number to control a <b>for</b> repetition structure.<br>
  280.      Correction: Use an integer, and perform the proper calculation in order to get 
  281. the values you desire.<br>
  282. <font size=2><br></font><font size=11><pre>
  283. for ( y = 1; y != 10; y++ )<p>
  284.    cout << ( static_cast< float >( y ) / 10 ) << endl;<p>
  285. </pre></font>
  286. c)  Error: Missing <b>break</b> statement in the statements for the first <b>case</b>.<br>
  287.      Correction: Add a <b>break</b> statement at the end of the statements for the first 
  288. <b>case</b>. Note that this is not necessarily an error if the programmer wants the<br>
  289. <foreign  name="exercises" url="^Exercises::c:s0p14">
  290.  
  291. </page>
  292. <page pagename="Answer 2.13">
  293. statement of <b>case 2:</b> to execute every time the <b>case 1:</b> statement executes.<br>
  294. d)  Error: Improper relational operator used in the while repetition-continuation 
  295. condition.<br>
  296.      Correction: Use <b><=</b> rather than <b><</b> or change <b>10</b> to <b>11</b>.<br>
  297. <foreign  name="exercises" url="^Exercises::c:s0p14">
  298.  
  299. </page>
  300. <page pagename="Answer 2.14">
  301. <b>Answer 2.14</b><br>
  302. a)  The semicolon at the end of the <b>if</b> should be removed. The closing double 
  303. quote after the second <b>endl</b> should be placed after <b>65</b>.<br>
  304. b)  The semicolon after the <b>else</b> should be removed. The closing double quote 
  305. after the second <b>endl</b> should be placed after <b>65</b>.<br>
  306. c)  Variable <b>total</b> should be initialized to <b>0</b>.<br>
  307. d)  The <b>W</b> in <b>while</b> should be lowercase. The <b>while</b>'s body should be enclosed in 
  308. braces <b>{}</b>.<br>
  309. e)  The variable <b>y</b> should be decremented (i.e., <b>--y;</b>) not incremented ( <b>++y;</b>).<br>
  310. <foreign  name="exercises" url="^Exercises::c:s0p16">
  311.  
  312. </page>
  313. <page pagename="Answer 2.24">
  314. <b>Answer 2.24</b><br>
  315. <hr>
  316. <font size=2><br></font><font size=11><pre>
  317. ****<p>
  318. ++++++++<p>
  319. ****<p>
  320. ++++++++<p>
  321. ****<p>
  322. ++++++++<p>
  323. ****<p>
  324. ++++++++<p>
  325. ****<p>
  326. ++++++++<p>
  327. </pre></font>
  328. <hr>
  329. <foreign  name="exercises" url="^Exercises::c:s0p35">
  330.  
  331. </page>
  332. <page pagename="Answer 2.26">
  333. <b>Answer 2.26</b><br>
  334. a)   x = 9, y = 11<br>
  335. <hr>
  336. <font size=2><br></font><font size=11><pre>
  337. *****<p>
  338. $$$$$<p>
  339. </pre></font>
  340. <hr>
  341. x = 11, y = 9<br>
  342. <hr>
  343. <font size=2><br></font><font size=11><pre>
  344. $$$$$<p>
  345. </pre></font>
  346. <hr>
  347. <br>
  348. <foreign  name="exercises" url="^Exercises::c:s0p38">
  349.  
  350. </page>
  351. <page pagename="Answer 2.26">
  352. b)  x = 9, y = 11<br>
  353. <hr>
  354. <font size=2><br></font><font size=11><pre>
  355. *****<p>
  356. </pre></font>
  357. <hr>
  358. x = 11, y = 9<br>
  359. <hr>
  360. <font size=2><br></font><font size=11><pre>
  361. #####<p>
  362. $$$$$<p>
  363. </pre></font>
  364. <hr>
  365. <foreign  name="exercises" url="^Exercises::c:s0p38">
  366. <br>
  367.  
  368. </page>
  369. <page pagename="Answer 2.16 ">
  370. <b>Answer 2.16 </b><br>
  371. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  372. the file cpphtp2/answers/P2_16.zip to your hard drive and unzip the program 
  373. code.<br>
  374. <foreign  name="exercises" url="^Exercises::c:s0p22">
  375. <br>
  376.  
  377. </page>
  378. <page pagename="Answer 2.18 ">
  379. <b>Answer 2.18 </b><br>
  380. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  381. the file cpphtp2/answers/P2_18.zip to your hard drive and unzip the program 
  382. code.<br>
  383. <foreign  name="exercises" url="^Exercises::c:s0p27">
  384. <br>
  385.  
  386. </page>
  387. <page pagename="Answer 2.20 ">
  388. <b>Answer 2.20 </b><br>
  389. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  390. the file cpphtp2/answers/P2_20.zip to your hard drive and unzip the program 
  391. code.<br>
  392. <foreign  name="exercises" url="^Exercises::c:s0p31">
  393. <br>
  394.  
  395. </page>
  396. <page pagename="Answer 2.29 ">
  397. <b>Answer 2.29 </b><br>
  398. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  399. the file cpphtp2/answers/P2_29.zip to your hard drive and unzip the program 
  400. code.<br>
  401. <foreign  name="exercises" url="^Exercises::c:s0p44">
  402. <br>
  403.  
  404. </page>
  405. <page pagename="Answer 2.31 ">
  406. <b>Answer 2.31 </b><br>
  407. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  408. the file cpphtp2/answers/P2_31.zip to your hard drive and unzip the program 
  409. code.<br>
  410. <foreign  name="exercises" url="^Exercises::c:s0p46">
  411. <br>
  412.  
  413. </page>
  414. <page pagename="Answer 2.33 ">
  415. <b>Answer 2.33 </b><br>
  416. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  417. the file cpphtp2/answers/P2_33.zip to your hard drive and unzip the program 
  418. code.<br>
  419. <foreign  name="exercises" url="^Exercises::c:s0p49">
  420. <br>
  421.  
  422. </page>
  423. <page pagename="Answer 2.37 ">
  424. <b>Answer 2.37 </b><br>
  425. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  426. the file cpphtp2/answers/P2_37.zip to your hard drive and unzip the program 
  427. code.<br>
  428. <foreign  name="exercises" url="^Exercises::c:s0p53">
  429. <br>
  430.  
  431. </page>
  432. <page pagename="Answer 2.40 ">
  433. <b>Answer 2.40 </b><br>
  434. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  435. the file cpphtp2/answers/P2_40.zip to your hard drive and unzip the program 
  436. code.<br>
  437. <foreign  name="exercises" url="^Exercises::c:s0p58">
  438. <br>
  439.  
  440. </page>
  441. <page pagename="Answer 2.43 ">
  442. <b>Answer 2.43 </b><br>
  443. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  444. the file cpphtp2/answers/P2_43.zip to your hard drive and unzip the program 
  445. code.<br>
  446. <foreign  name="exercises" url="^Exercises::c:s0p62">
  447. <br>
  448.  
  449. </page>
  450. <page pagename="Answer 2.45 ">
  451. <b>Answer 2.45 </b><br>
  452. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  453. the file cpphtp2/answers/P2_45.zip to your hard drive and unzip the program 
  454. code.<br>
  455. <foreign  name="exercises" url="^Exercises::c:s0p64">
  456. <br>
  457.  
  458. </page>
  459. <page pagename="Answer 2.48 ">
  460. <b>Answer 2.48 </b><br>
  461. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  462. the file cpphtp2/answers/P2_48.zip to your hard drive and unzip the program 
  463. code.<br>
  464. <foreign  name="exercises" url="^Exercises::c:s0p68">
  465. <br>
  466.  
  467. </page>
  468. <page pagename="Answer 2.49 ">
  469. <b>Answer 2.49 </b><br>
  470. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  471. the file cpphtp2/answers/P2_49.zip to your hard drive and unzip the program 
  472. code.<br>
  473. <foreign  name="exercises" url="^Exercises::c:s0p69">
  474. <br>
  475.  
  476. </page>
  477. <page pagename="Answer 2.54 ">
  478. <b>Answer 2.54 </b><br>
  479. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  480. the file cpphtp2/answers/P2_54.zip to your hard drive and unzip the program 
  481. code.<br>
  482. <foreign  name="exercises" url="^Exercises::c:s0p74">
  483. <br>
  484.  
  485. </page>
  486. <page pagename="Answer 2.58 ">
  487. <b>Answer 2.58 </b><br>
  488. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  489. the file cpphtp2/answers/P2_58.zip to your hard drive and unzip the program 
  490. code.<br>
  491. <foreign  name="exercises" url="^Exercises::c:s0p80">
  492. <br>
  493.  
  494. </page>
  495. <page pagename="Answer 2.60 ">
  496. <b>Answer 2.60 </b><br>
  497. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  498. the file cpphtp2/answers/P2_60.zip to your hard drive and unzip the program 
  499. code.<br>
  500. <foreign  name="exercises" url="^Exercises::c:s0p83">
  501. <br>
  502.  
  503. </page>
  504. <page pagename="Answer 2.63 ">
  505. <b>Answer 2.63 </b><br>
  506. The solution to this exercise can be found on your Cyber Classroom CD. Copy 
  507. the file cpphtp2/answers/P2_63.zip to your hard drive and unzip the program 
  508. code.<br>
  509. <foreign  name="exercises" url="^Exercises::c:s0p86">
  510. <br>
  511.  
  512. </page>
  513. </section>
  514. <section type=Body name=Default title="2 Control Structures">
  515. <page>
  516. <font size=18 bold>2 Control Structures</font><hr>
  517. <a href="#s1p0">2.1<spacer width=20 height=1>Introduction</a>  <br>
  518. <a href="#s2p0">2.2<spacer width=20 height=1>Algorithms</a>  <br>
  519. <a href="#s3p0">2.3<spacer width=20 height=1>Pseudocode</a>  <br>
  520. <a href="#s4p0">2.4<spacer width=20 height=1>Control Structures</a>  <br>
  521. <a href="#s5p0">2.5<spacer width=20 height=1>The <b>if</b> Selection Structure</a>  <br>
  522. <a href="#s6p0">2.6<spacer width=20 height=1>The <b>if/else</b> Selection Structure</a>  <br>
  523. <a href="#s7p0">2.7<spacer width=20 height=1>The <b>while</b> Repetition Structure</a>  <br>
  524. <a href="#s8p0">2.8<spacer width=20 height=1>Formulating Algorithms: Case Study 1 (Counter-
  525. Controlled Repetition)</a>  <br>
  526. <foreign  name="objectivesButton" url="^Objective::c:s0p0">
  527. <foreign  name="quotes" url="^Quotes::c:s0p0">
  528.  
  529. </page>
  530. <page>
  531. <a href="#s9p0">2.9<spacer width=20 height=1>Formulating Algorithms with Top-Down, Stepwise 
  532. Refinement: Case Study 2 (Sentinel-Controlled 
  533. Repetition)</a>  <br>
  534. <a href="#s10p0">2.10<spacer width=20 height=1>Formulating Algorithms with Top-Down, Stepwise 
  535. Refinement: Case Study 3 (Nested Control Structures)</a>  <br>
  536. <a href="#s11p0">2.11<spacer width=20 height=1>Assignment Operators</a>  <br>
  537. <a href="#s12p0">2.12<spacer width=20 height=1>Increment and Decrement Operators</a>  <br>
  538. <a href="#s13p0">2.13<spacer width=20 height=1>Essentials of Counter-Controlled Repetition</a>  <br>
  539. <a href="#s14p0">2.14<spacer width=20 height=1>The for Repetition Structure</a>  <br>
  540. <a href="#s15p0">2.15<spacer width=20 height=1>Examples Using the for Structure</a>  <br>
  541. <a href="#s16p0">2.16<spacer width=20 height=1>The <b>switch</b> Multiple-Selection Structure</a>  <br>
  542. <foreign  name="objectivesButton" url="^Objective::c:s0p0">
  543. <foreign  name="quotes" url="^Quotes::c:s0p0">
  544.  
  545. </page>
  546. <page>
  547. <a href="#s17p0">2.17<spacer width=20 height=1>The <b>do/while</b> Repetition Structure</a>  <br>
  548. <a href="#s18p0">2.18<spacer width=20 height=1>The <b>break</b> and <b>continue</b> Statements</a>  <br>
  549. <a href="#s19p0">2.19<spacer width=20 height=1>Logical Operators</a>  <br>
  550. <a href="#s20p0">2.20<spacer width=20 height=1>Confusing Equality (==) and Assignment (=) 
  551. Operators</a>  <br>
  552. <a href="#s21p0">2.21<spacer width=20 height=1>Structured Programming Summary</a>  <br>
  553. <a href="#s22p0">2.22<spacer width=20 height=1>Thinking About Objects: Identifying the Objects in 
  554. a Problem</a>  <br>
  555. <a href="#s23p0">2.23<spacer width=20 height=1>Elevator Laboratory Assignment 1</a>  <br>
  556. <a href="#s24p0">2.24<spacer width=20 height=1>Summary</a>  <br>
  557. <a href="^Terminology::c:s0p0">Terminology</a>  <br>
  558. <a href="^Illustration::c:s0p0">Figures</a>  <br>
  559. <foreign  name="objectivesButton" url="^Objective::c:s0p0">
  560. <foreign  name="quotes" url="^Quotes::c:s0p0">
  561.  
  562. </page>
  563. </section>
  564. <section type=Body name=Default title="2.1 Introduction">
  565. <page>
  566. <font size=18 bold>2.1 Introduction</font><hr>
  567. Before writing a program to solve a particular problem, 
  568. it is essential to have a thorough understanding of the 
  569. problem and a carefully planned approach to solving 
  570. the problem. When writing a program, it is equally 
  571. essential to understand the types of building blocks that 
  572. are available and to employ proven program 
  573. construction principles. In this chapter we discuss all of 
  574. these issues in our presentation of the theory and 
  575. principles of structured programming. The techniques 
  576. that you will learn here are applicable to most high-
  577. level languages, including C++. When we begin our <br>
  578.  
  579. </page>
  580. <page>
  581. treatment of object-oriented programming in C++ in 
  582. Chapter 6, we will see that the control structures we 
  583. study here in Chapter 2 are helpful in building and 
  584. manipulating objects.<br>
  585.  
  586. </page>
  587. </section>
  588. <section type=Body name=Default title="2.2 Algorithms">
  589. <page>
  590. <font size=18 bold>2.2 Algorithms</font><hr>
  591. Any computing problem can be solved by executing a 
  592. series of actions in a specific order. A <i>procedure</i> for 
  593. solving a problem in terms of<br>
  594. 1. the <i>actions</i> to be executed, and<br>
  595. 2. the <i>order</i> in which these actions are to be executed<br>
  596. is called an <i>algorithm</i>. The following example 
  597. demonstrates that correctly specifying the order in 
  598. which the actions are to be executed is important.<br>
  599. <spacer width=16 height=1>Consider the "rise-and-shine algorithm" followed by 
  600. one junior executive for getting out of bed and going to 
  601. work: (1) Get out of bed, (2) take off pajamas, (3) take a <br>
  602.  
  603. </page>
  604. <page>
  605. shower, (4) get dressed, (5) eat breakfast, (6) carpool to 
  606. work.<br>
  607. <spacer width=16 height=1>This routine gets the executive to work well prepared to 
  608. make critical decisions. Suppose, however, that the 
  609. same steps are performed in a slightly different order: 
  610. (1) Get out of bed, (2) take off pajamas, (3) get dressed, 
  611. (4) take a shower, (5) eat breakfast, (6) carpool to work.<br>
  612. <spacer width=16 height=1>In this case, our junior executive shows up for work 
  613. soaking wet. Specifying the order in which statements 
  614. are to be executed in a computer program is called 
  615. <i>program control</i>. In this chapter, we investigate the 
  616. program control capabilities of C++.<br>
  617.  
  618. </page>
  619. <page>
  620. <b>Drag the appropriate term to its matching box so the 
  621. resulting sentence defines the term algorithm. </b><br>
  622. A <component type="drag" width=72 height=18 label="procedure" name="procedure"> for solving a problem in terms of the <component type="drag" width=56 height=18 label="actions" name="actions"> to be executed, and the <component type="drag" width=40 height=18 label="order" name="order"> in which these actions are to be executed.<br>
  623. Any computer problem can be solved by a <component type="drop" width=48 height=18 name="procedure"> consisting of a series of <component type="drop" width=48 height=18 name="actions"> executed in <component type="drop" width=48 height=18 name="order">. <br>
  624. <component type=button name=b label="Check Your Answer" width=125 height=24>
  625.  
  626. </page>
  627. </section>
  628. <section type=Body name=Default title="2.3 Pseudocode">
  629. <page>
  630. <font size=18 bold>2.3 Pseudocode</font><hr>
  631. <i>Pseudocode</i> is an artificial and informal language that 
  632. helps programmers develop algorithms. The 
  633. pseudocode we present here is particularly useful for 
  634. developing algorithms that will be converted to 
  635. structured C++ programs. Pseudocode is similar to 
  636. everyday English; it is convenient and user-friendly 
  637. although it is not an actual computer programming 
  638. language.<br>
  639. <spacer width=16 height=1>Pseudocode programs are not actually executed on 
  640. computers. Rather, they help the programmer "think 
  641. out" a program before attempting to write it in a <br>
  642.  
  643. </page>
  644. <page>
  645. programming language such as C++. In this chapter, we 
  646. give several examples of how pseudocode may be used 
  647. effectively in developing structured C++ programs.<br>
  648. <spacer width=16 height=1>The style of pseudocode we present consists purely of 
  649. characters, so programmers can conveniently type 
  650. pseudocode programs using an editor program. The 
  651. computer can display a fresh copy of a pseudocode 
  652. program on demand. A carefully prepared pseudocode 
  653. program may be converted easily to a corresponding 
  654. C++ program. This is done in many cases simply by 
  655. replacing pseudocode statements with their C++ 
  656. equivalents.<br>
  657.  
  658. </page>
  659. <page>
  660. Pseudocode consists only of executable statements--
  661. those that are executed when the program has been 
  662. converted from pseudocode to C++ and is run. 
  663. Declarations are not executable statements. For 
  664. example, the declaration<br>
  665. <font size=2><br></font><font size=11><pre>
  666. int i;<p>
  667. </pre></font>
  668. simply tells the compiler the type of variable i and 
  669. instructs the compiler to reserve space in memory for 
  670. the variable. But this declaration does not cause any 
  671. action--such as input, output, or a calculation--to 
  672. occur when the program is executed. Some 
  673. programmers choose to list variables and briefly <br>
  674.  
  675. </page>
  676. <page>
  677. mention the purpose of each at the beginning of a 
  678. pseudocode program. <br>
  679.  
  680. </page>
  681. <page>
  682. <b>From the items listed below, select the ones that are 
  683. true about pseudocode. </b><br>
  684. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  685. Pseudocode is an artificial and informal language.  <br>
  686. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  687. Some programmers use pseudocode as an aid in problem solving. <br>
  688. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. Pseudocode is not compiled.">
  689. Pseudocode compiles quickly.   <br>
  690. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  691. Carefully prepared pseudocode can be easily converted to a C++ progam.  <br>
  692. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. Pseudocode is not executed.">
  693. Pseudocode is one of the slowest executing languages. <br>
  694. <component type=button name=b label="Check Your Answer" width=125 height=24>
  695.  
  696. </page>
  697. </section>
  698. <section type=Body name=Default title="2.4 Control Structures">
  699. <page>
  700. <font size=18 bold>2.4 Control Structures</font><hr>
  701. Normally, statements in a program are executed one 
  702. after the other in the order in which they are written. 
  703. This is called <i>sequential execution</i>. Various C++ 
  704. statements we will soon discuss enable the programmer 
  705. to specify that the next statement to be executed may be 
  706. other than the next one in sequence. This is called 
  707. <i>transfer of control</i>.<br>
  708. <spacer width=16 height=1>During the 1960s, it became clear that the 
  709. indiscriminate use of transfers of control was the root of 
  710. much difficulty experienced by software development 
  711. groups. The finger of blame was pointed at the <b>goto</b> <br>
  712.  
  713. </page>
  714. <page>
  715. <i>statement</i> that allows the programmer to specify a 
  716. transfer of control to one of a very wide range of 
  717. possible destinations in a program. The notion of so-
  718. called <i>structured programming</i> became almost 
  719. synonymous with "<b>goto</b> <i>elimination</i>."<br>
  720. <spacer width=16 height=1>The research of Bohm and Jacopini (<spacer width=20 height=1>Bohm, C. and G. 
  721. Jacopini, "Flow Diagrams, Turing Machines, and 
  722. Languages with Only Two Formation Rules," 
  723. Communications of the ACM, Vol. 9, No. 5, May 1966, 
  724. pp. 336-371.) had demonstrated that programs could be 
  725. written without any <b>goto</b> statements. The challenge of 
  726. the era became for programmers to shift their styles to 
  727. "<b>goto</b>-less programming." It was not until the 1970s <br>
  728.  
  729. </page>
  730. <page>
  731. that programmers started taking structured 
  732. programming seriously. The results have been 
  733. impressive as software development groups have 
  734. reported reduced development times, more frequent on-
  735. time delivery of systems, and more frequent within-
  736. budget completion of software projects. The key to 
  737. these successes is that structured programs are clearer, 
  738. easier to debug and modify, and more likely to be bug-
  739. free in the first place.<br>
  740. <spacer width=16 height=1>Bohm and Jacopini's work demonstrated that all 
  741. programs could be written in terms of only three <i>control 
  742. structures</i>, namely the <i>sequence structure</i>, the <i>selection 
  743. structure</i>, and the <i>repetition structure</i>. The sequence <br>
  744.  
  745. </page>
  746. <page>
  747. structure is built into C++. Unless directed otherwise, 
  748. the computer executes C++ statements one after the 
  749. other in the order in which they are written. The 
  750. <i>flowchart</i> segment of  <a href="^Illustration::c:s0p3"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.1</a> illustrates a typical 
  751. sequence structure in which two calculations are 
  752. performed in order.<br>
  753. <spacer width=16 height=1>A flowchart is a graphical representation of an 
  754. algorithm or of a portion of an algorithm. Flowcharts 
  755. are drawn using certain special-purpose symbols such 
  756. as rectangles, diamonds, ovals, and small circles; these 
  757. symbols are connected by arrows called <i>flowlines</i>. <br>
  758. <spacer width=16 height=1>Like pseudocode, flowcharts are useful for developing 
  759. and representing algorithms, although pseudocode is <br>
  760.  
  761. </page>
  762. <page>
  763. strongly preferred by most programmers. Flowcharts 
  764. clearly show how control structures operate; that is all 
  765. we use them for in this text. <br>
  766. <spacer width=16 height=1>Consider the flowchart segment for the sequence 
  767. structure in <a href="^Illustration::c:s0p3"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.1</a>. We use the <i>rectangle symbol</i>, also 
  768. called the <i>action symbol</i>, to indicate any type of action 
  769. including a calculation or an input/output operation. The 
  770. flowlines in the figure indicate the order in which the 
  771. actions are to be performed--first, <b>grade</b> is to be added 
  772. to <b>total</b> then <b>1</b> is to be added to <b>counter</b>. C++ allows us 
  773. to have as many actions as we want in a sequence 
  774. structure. As we will soon see, anywhere a single action <br>
  775.  
  776. </page>
  777. <page>
  778. may be placed, we may place several actions in 
  779. sequence. <br>
  780. <spacer width=16 height=1>When drawing a flowchart that represents a <i>complete</i> 
  781. algorithm, an <i>oval symbol</i> containing the word "Begin" 
  782. is the first symbol used in the flowchart; an oval symbol 
  783. containing the word "End" is the last symbol used. 
  784. When drawing only a portion of an algorithm as in <a href="^Illustration::c:s0p3"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 
  785. 2.1</a>, the oval symbols are omitted in favor of using 
  786. <i>small circle symbols</i> also called <i>connector symbols</i>. <br>
  787. <spacer width=16 height=1>Perhaps the most important flowcharting symbol is the 
  788. <i>diamond symbol</i>, also called the <i>decision symbol</i>, that 
  789. indicates a decision is to be made. We will discuss the 
  790. diamond symbol in the next section.<br>
  791.  
  792. </page>
  793. <page>
  794. C++ provides three types of selection structures; we 
  795. discuss each of these in this chapter. The <b>if</b> selection 
  796. structure either performs (selects) an action if a 
  797. condition is <b>true</b> or skips the action if the condition is 
  798. <b>false</b>. The <b>if/else</b> selection structure performs an action 
  799. if a condition is <b>true</b> and performs a different action if 
  800. the condition is <b>false</b>. The <b>switch</b> selection structure 
  801. performs one of many different actions depending on 
  802. the value of an expression.<br>
  803. <spacer width=16 height=1>The if selection structure is called a <i>single-selection 
  804. structure</i> because it selects or ignores a single action. 
  805. The <b>if/else</b> selection structure is called a <i>double-
  806. selection structure</i> because it selects between two <br>
  807.  
  808. </page>
  809. <page>
  810. different actions. The <b>switch</b> selection structure is 
  811. called a <i>multiple-selection structure</i> because it selects 
  812. the action to perform from many different actions. <br>
  813. <spacer width=16 height=1>C++ provides three types of repetition structures, 
  814. namely <b>while</b>, <b>do/while</b> and <b>for</b>. Each of the words <b>if</b>, 
  815. <b>else</b>, <b>switch</b>, <b>while</b>, <b>do</b>, and <b>for</b> are C++ <i>keywords</i>. 
  816. These words are reserved by the language to implement 
  817. various features such as C++'s control structures. 
  818. <a href="^Errors::c:s0p0"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>Keywords may not be used as identifiers such as for 
  819. variable names. A complete list of C++ keywords is 
  820. shown in  <a href="^Illustration::c:s0p4"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.2</a>.<br>
  821. Well, that is all there is. C++ has only seven control 
  822. structures: sequence, three types of selection and three <br>
  823.  
  824. </page>
  825. <page>
  826. types of repetition. Each C++ program is formed by 
  827. combining as many of each type of control structure as 
  828. is appropriate for the algorithm the program 
  829. implements. As with the sequence structure of  <a href="^Illustration::c:s0p3"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.1</a>, 
  830. we will see that each control structure is flowcharted 
  831. with two small circle symbols, one at the entry point to 
  832. the control structure and one at the exit point. These 
  833. <i>single-entry/single-exit control structures</i> make it easy 
  834. to build programs--the control structures are attached 
  835. to one another by connecting the exit point of one 
  836. control structure to the entry point of the next. This is 
  837. similar to the way a child stacks building blocks, so we 
  838. call this <i>control-structure stacking</i>. We will learn that <br>
  839.  
  840. </page>
  841. <page>
  842. there is only one other way control structures may be 
  843. connected-- <a href="^Engineer::c:s0p0"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>a method called <i>control-structure nesting</i>. <br>
  844.  
  845. </page>
  846. <page>
  847. <b>Drag the correct term to the box associated with the 
  848. attribute:</b><br>
  849. <component type="drag" width=72 height=18 label="selection" name="selection">   <component type="drag" width=80 height=18 label="repetition" name="repetition">   <component type="drag" width=64 height=18 label="keywords" name="keywords">   <component type="drag" width=72 height=18 label="flowlines" name="flowlines">   <component type="drag" width=80 height=18 label="structured" name="structured">   <component type="drag" width=64 height=18 label="decision" name="decision"> <br>
  850. This flowchart symbol is also called the diamond symbol.<component type="drop" width=88 height=18 name="decision">  <br>
  851. These cannot be used as variable names.<component type="drop" width=88 height=18 name="keywords">  <br>
  852. The while loop is an example of this type of control structure.<component type="drop" width=88 height=18 name="repetition">  <br>
  853. The arrows that connect flowchart symbols.<component type="drop" width=88 height=18 name="flowlines">  <br>
  854. The if structure is an example of this type of control structure.<component type="drop" width=88 height=18 name="selection">  <br>
  855. <component type=button name=b label="Check Your Answer" width=125 height=24>
  856.  
  857. </page>
  858. </section>
  859. <section type=Body name=Default title="2.5 The if Selection Structure">
  860. <page>
  861. <font size=18 bold>2.5 The <b>if</b> Selection Structure</font><hr>
  862. A selection structure is used to choose among 
  863. alternative courses of action. For example, suppose the 
  864. passing grade on an exam is 60. The pseudocode 
  865. statement<br>
  866. <font size=3><br></font><indent width=20><font color=blue size=12><i>If student's grade is greater than or equal to 60<p>
  867. <spacer width=20 height=1>Print "Passed"</i></font></indent><font size=3><br></font>
  868. determines if the condition "student's grade is greater 
  869. than or equal to 60" is <b>true</b> or <b>false</b>. If the condition is 
  870. <b>true</b>, then "Passed" is printed, and the next pseudocode 
  871. statement in order is "performed" (remember that 
  872. pseudocode is not a real programming language). If the <br>
  873.  
  874. </page>
  875. <page>
  876. condition is <b>false</b>, the print statement is ignored, and the 
  877. next pseudocode statement in order is performed. Note 
  878. that the second line of this selection structure is 
  879. <a href="^Practice::c:s0p0"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>indented. Such indentation is optional, but it is highly 
  880. recommended because it emphasizes the inherent 
  881. structure of structured programs. When you covert your 
  882. pseudocode into C++ code, the C++ compiler ignores 
  883. <i>whitespace characters</i> like blanks, tabs and newlines 
  884. used for indentation and vertical spacing.<br>
  885. <spacer width=16 height=1>The preceding pseudocode If statement may be written 
  886. in C++ as<br>
  887. <font size=2><br></font><font size=11><pre>
  888. if ( grade >= 60 ) <p>
  889.    cout << "Passed";<p>
  890. </pre></font>
  891.  
  892. </page>
  893. <page>
  894. Notice that the C++ code corresponds closely to the 
  895. pseudocode. <a href="^Practice::c:s0p1"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>This is one of the properties of pseudocode 
  896. that makes it such a useful program development tool. <br>
  897. <spacer width=16 height=1>The flowchart of <a href="^Illustration::c:s0p5"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.3</a> illustrates the single-selection 
  898. <b>if</b> structure. This flowchart contains what is perhaps the 
  899. most important flowcharting symbol--the <i>diamond 
  900. symbol</i>, also called the <i>decision symbol</i>, which indicates 
  901. that a decision is to be made. The decision symbol 
  902. contains an expression, such as a condition, that can be 
  903. either <b>true</b> or <b>false</b>. The decision symbol has two 
  904. flowlines emerging from it. One indicates the direction 
  905. to be taken when the expression in the symbol is <b>true</b>; 
  906. the other indicates the direction to be taken when the <br>
  907.  
  908. </page>
  909. <page>
  910. expression is <b>false</b>. We learned in Chapter 1 that 
  911. decisions can be made based on conditions containing 
  912. relational or equality operators. Actually, a decision can 
  913. be made on any expression--if the expression evaluates 
  914. to zero, it is treated as <b>false</b>, and if the expression 
  915. evaluates to nonzero, it is treated as <b>true</b>. The C++ draft 
  916. standard provides the data type <b>bool</b> to represent <b>true</b> 
  917. and <b>false</b>. The keywords <b>true</b> and <b>false</b> are used to 
  918. represent values of type <b>bool</b>. <br>
  919. <spacer width=16 height=1>Note that the <b>if</b> structure, too, is a single-entry/single-
  920. exit structure. We will soon learn that the flowcharts for 
  921. the remaining control structures also contain (besides 
  922. small circle symbols and flowlines) only rectangle <br>
  923.  
  924. </page>
  925. <page>
  926. symbols to indicate the actions to be performed, and 
  927. diamond symbols to indicate decisions to be made. This 
  928. is the <i>action/decision model of programming</i> we have 
  929. been emphasizing. <br>
  930. <spacer width=16 height=1>We can envision seven bins, each containing only 
  931. control structures of one of the seven types. These 
  932. control structures are empty. Nothing is written in the 
  933. rectangles or in the diamonds. The programmer's task, 
  934. then, is assembling a program from as many of each 
  935. type of control structure as the algorithm demands, 
  936. combining those control structures in only two possible 
  937. ways (stacking or nesting), and then filling in the 
  938. actions and decisions in a manner appropriate for the <br>
  939.  
  940. </page>
  941. <page>
  942. algorithm. We will discuss the variety of ways in which 
  943. actions and decisions may be written. <br>
  944.  
  945. </page>
  946. <page>
  947. <b>Drag the correct term to the box associated with the 
  948. attribute:</b><br>
  949. <component type="drag" width=32 height=18 label="bool" name="bool">   <component type="drag" width=88 height=18 label="indentation" name="indentation">   <component type="drag" width=80 height=18 label="whitespace" name="whitespace"><br>
  950. These characters are ignored by the C++ compiler.<component type="drop" width=96 height=18 name="whitespace">  <br>
  951. Data type, besides int, that has values of true and false.<component type="drop" width=96 height=18 name="bool">  <br>
  952. Programmers use this technique to emphasize the structured nature of a program.<component type="drop" width=96 height=18 name="indentation">  <br>
  953. <component type=button name=b label="Check Your Answer" width=125 height=24>
  954.  
  955. </page>
  956. </section>
  957. <section type=Body name=Default title="2.6 The if/else Selection Structure">
  958. <page>
  959. <font size=18 bold>2.6 The <b>if/else</b> Selection Structure</font><hr>
  960. The <b>if</b> selection structure performs an indicated action 
  961. only when the condition is <b>true</b>; otherwise the action is 
  962. skipped. The <b>if/else</b> selection structure allows the 
  963. programmer to specify that a different action is to be 
  964. performed when the condition is <b>true</b> than when the 
  965. condition is <b>false</b>. For example, the pseudocode 
  966. statement<br>
  967. <font size=3><br></font><indent width=20><font color=blue size=12><i>If student's grade is greater than or equal to 60<p>
  968. <spacer width=20 height=1>Print "Passed"<p>
  969. else<p>
  970. <spacer width=20 height=1>Print "Failed"</i></font></indent><font size=3><br></font>
  971.  
  972. </page>
  973. <page>
  974. prints <i>Passed</i> if the student's grade is greater than or 
  975. equal to 60 and prints <i>Failed</i> if the student's grade is 
  976. less than 60. In either case, after printing occurs, the 
  977. next pseudocode statement in sequence is "performed." 
  978. Note that the body of the <b>else</b> is also <a href="^Practice::c:s0p3"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>indented.<br>
  979. <spacer width=16 height=1>Whatever in<a href="^Practice::c:s0p2"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>dentation convention you choose should be 
  980. carefully applied throughout your programs. It is 
  981. difficult to read programs that do not obey uniform 
  982. spacing conventions. <br>
  983. <spacer width=16 height=1>The preceding pseudocode <i>If/else</i> structure may be 
  984. written in C++ as<br>
  985. <font size=2><br></font><font size=11><pre>
  986. if ( grade >= 60 ) <p>
  987.    cout << "Passed";<p><p>
  988. </pre></font>
  989.  
  990. </page>
  991. <page>
  992. <font size=2><br></font><font size=11><pre>
  993. else<p>
  994.    cout << "Failed";<p>
  995. </pre></font>
  996. The flowchart of <a href="^Illustration::c:s0p6"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.4</a> nicely illustrates the flow of 
  997. control in the<b> if/else</b> structure. Once again, note that 
  998. (besides small circles and arrows) the only symbols in 
  999. the flowchart are rectangles (for actions) and a diamond 
  1000. (for a decision). We continue to emphasize this action/
  1001. decision model of computing. Imagine again a deep bin 
  1002. containing as many empty double-selection structures 
  1003. as might be needed to build any C++ program. The 
  1004. programmer's job is to assemble these selection 
  1005. structures (by stacking and nesting) with any other 
  1006. control structures required by the algorithm, and to fill <br>
  1007.  
  1008. </page>
  1009. <page>
  1010. in the empty rectangles and empty diamonds with 
  1011. actions and decisions appropriate to the algorithm being 
  1012. implemented. <br>
  1013. <spacer width=16 height=1>C++ provides the <i>conditional operator</i> (<b>?:</b>) that is 
  1014. closely related to the <b>if/else</b> structure. The conditional 
  1015. operator is C++'s only <i>ternary operator</i>--it takes three 
  1016. operands. The operands together with the conditional 
  1017. operator form a <i>conditional expression</i>. The first 
  1018. operand is a condition, the second operand is the value 
  1019. for the entire conditional expression if the condition is 
  1020. <b>true</b>, and the third operand is the value for the entire 
  1021. conditional expression if the condition is <b>false</b>. For 
  1022. example, the output statement<br>
  1023.  
  1024. </page>
  1025. <page>
  1026. <font size=2><br></font><font size=11><pre>
  1027. cout << ( grade >= 60 ? "Passed" : "Failed" );<p>
  1028. </pre></font>
  1029. contains a conditional expression that evaluates to the 
  1030. string "<b>Passed</b>" if the condition <b>grade >= 60</b> is <b>true</b> 
  1031. and evaluates to the string "<b>Failed</b>" if the condition is 
  1032. <b>false</b>. Thus, the statement with the conditional operator 
  1033. performs essentially the same as the preceding <b>if/else</b> 
  1034. statement. As we will see, the precedence of the 
  1035. conditional operator is low, so the parentheses in the 
  1036. preceding expression are required. <br>
  1037. The values in a conditional expression can also be 
  1038. actions to execute. For example, the conditional 
  1039. expression<br>
  1040. <font size=2><br></font><font size=11><pre>
  1041. grade >= 60 ? cout << "Passed" : cout << "Failed";<p>
  1042. </pre></font>
  1043.  
  1044. </page>
  1045. <page>
  1046. is read, "If <b>grade</b> is greater than or equal to <b>60</b> then 
  1047. <b>cout << "Passed"</b>, otherwise <b>cout << "Failed"</b>." This, 
  1048. too, is comparable to the preceding <b>if/else</b> structure. We 
  1049. will see that conditional operators can be used in some 
  1050. situations where <b>if/else</b> statements cannot. <br>
  1051. <spacer width=16 height=1><i>Nested</i> <b>if/else</b> <i>structures</i> test for multiple cases by 
  1052. placing <b>if/else</b> selection structures inside <b>if/else</b> 
  1053. selection structures. For example, the following 
  1054. pseudocode statement will print <b>A</b> for exam grades 
  1055. greater than or equal to 90, <b>B</b> for grades in the range 80 
  1056. to 89, <b>C</b> for grades in the range 70 to 79, <b>D</b> for grades in 
  1057. the range 60 to 69, and <b>F</b> for all other grades.<br>
  1058. <font size=3><br></font><indent width=20><font color=blue size=12><i>If student's grade is greater than or equal to 90<p></i></font></indent><font size=3><br></font>
  1059.  
  1060. </page>
  1061. <page>
  1062. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Print "A"<p>
  1063. else <p>
  1064. <spacer width=20 height=1>If student's grade is greater than or equal to 80<p>
  1065. <spacer width=20 height=1><spacer width=20 height=1>Print "B"<p>
  1066. <spacer width=20 height=1>else <p>
  1067. <spacer width=20 height=1><spacer width=20 height=1>If student's grade is greater than or equal to 70 <p>
  1068. <spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1>Print "C"<p>
  1069. <spacer width=20 height=1><spacer width=20 height=1>else <p>
  1070. <spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1>If student's grade is greater than or equal to 60 <p>
  1071. <spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1>Print "D"<p>
  1072. <spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1>else<p>
  1073. <spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1><spacer width=20 height=1>Print "F"</i></font></indent><font size=3><br></font>
  1074. This pseudocode may be written in C++ as<br>
  1075. <font size=2><br></font><font size=11><pre>
  1076. if ( grade >= 90 )<p>
  1077.    cout << "A";<p>
  1078. else <p><p>
  1079. </pre></font>
  1080.  
  1081. </page>
  1082. <page>
  1083. <font size=2><br></font><font size=11><pre>
  1084.    if ( grade >= 80 )<p>
  1085.       cout << "B";<p>
  1086.    else <p>
  1087.       if ( grade >= 70 )<p>
  1088.          cout << "C";<p>
  1089.       else <p>
  1090.          if ( grade >= 60 )<p>
  1091.             cout << "D";<p>
  1092.          else<p>
  1093.             cout << "F";<p>
  1094. </pre></font>
  1095. If <b>grade</b> is greater than or equal to 90, the first four 
  1096. conditions will be <b>true</b>, but only the <b>cout</b> statement 
  1097. after the first test will be executed. After that <b>cout</b> is 
  1098. executed, the <b>else</b>-part of the "outer" <b>if/else</b> statement is <br>
  1099.  
  1100. </page>
  1101. <page>
  1102. skipped. Many C++ programmers prefer to write the 
  1103. preceding <b>if</b> structure as <br>
  1104. <font size=2><br></font><font size=11><pre>
  1105. if ( grade >= 90 )<p>
  1106.    cout << "A";<p>
  1107. else if ( grade >= 80 )<p>
  1108.    cout << "B";<p>
  1109. else if ( grade >= 70 )<p>
  1110.    cout << "C";<p>
  1111. else if ( grade >= 60 )<p>
  1112.    cout << "D";<p>
  1113. else<p>
  1114.    cout << "F";<p>
  1115. </pre></font>
  1116. <a href="^Perform::c:s0p2"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>Both forms are equivalent. The latter form is popular 
  1117. because it avoids the deep indentation of the code to the 
  1118. right. Such indentation often leaves little room on a  <br>
  1119.  
  1120. </page>
  1121. <page>
  1122. <a href="^Perform::c:s0p0"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>line, forcing lines to be split and decreasing program 
  1123. readability.<br>
  1124. <spacer width=16 height=1>The <b>if</b> selection structure expects only one statement in 
  1125. its body. To include several statements in the body of an 
  1126. <b>if</b>, enclose the statements in braces (<b>{</b> and <b>}</b>). A set of 
  1127. statements contained within a pair of braces is <a href="^Engineer::c:s0p2"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>called a 
  1128. <i>compound statement</i>. <br>
  1129. <spacer width=16 height=1>The following example includes a compound statement 
  1130. in the <b>else</b> part of an <b>if/else</b> structure.<br>
  1131. <font size=2><br></font><font size=11><pre>
  1132. if ( grade >= 60 )<p>
  1133.    cout << "Passed.\n";<spacer width=20 height=1><p>
  1134. else {<p>
  1135.    cout << "Failed.\n";<p><p>
  1136. </pre></font>
  1137.  
  1138. </page>
  1139. <page>
  1140. <font size=2><br></font><font size=11><pre>
  1141.    cout << "You must take this course again.\n";<p>
  1142. }<p>
  1143. </pre></font>
  1144. In this case, if <b>grade</b> is less than 60, the program 
  1145. executes both statements in the body of the <b>else</b> and 
  1146. prints<br>
  1147. <font size=2><br></font><font size=11><pre>
  1148. Failed.<p>
  1149. You must take this course again.<p>
  1150. </pre></font>
  1151. Notice the braces surrounding the two statements in the 
  1152. <b>else</b> clause. <a href="^Errors::c:s0p1"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>These braces are important. Without the 
  1153. braces, the statement<br>
  1154. <font size=2><br></font><font size=11><pre>
  1155. cout << "You must take this course again.\n";<p>
  1156. </pre></font>
  1157.  
  1158. </page>
  1159. <page>
  1160. would be outside the body of the <b>else</b>-part of the <b>if</b>, and 
  1161. would <a href="^Practice::c:s0p4"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>execute regardless of whether the grade is less 
  1162. than 60. <br>
  1163. <spacer width=16 height=1> <a href="^Errors::c:s0p2"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>A syntax error is caught by the compiler. A <i>logic error</i> 
  1164. has its effect at execution time. A <i>fatal logic error</i> 
  1165. causes <a href="^Practice::c:s0p5"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>a program to fail and terminate prematurely. A 
  1166. <i>nonfatal logic error</i> allows a program to continue <a href="^Engineer::c:s0p3"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a> 
  1167. executing but the program produces incorrect results.<br>
  1168. <spacer width=16 height=1>In this section, we introduced the notion of a compound 
  1169. statement. A compound statement may contain 
  1170. declarations (as does the body of <b>main</b>, for example). If 
  1171. so, the compound statement is called a <i>block</i>. The 
  1172. declarations in a block are commonly placed first in the <br>
  1173.  
  1174. </page>
  1175. <page>
  1176. block before any action statements, but declarations 
  1177. may be intermixed with action statements. We will 
  1178. discuss the use of blocks in Chapter 3. The reader 
  1179. should avoid using blocks (other than as the body of 
  1180. <b>main</b>, of course) until that time.<br>
  1181.  
  1182. </page>
  1183. <page>
  1184. <b>Select the true statement(s). </b><br>
  1185. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1186. The if structure performs an indicated action only when the condition is true.  <br>
  1187. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1188. if/else structures can be nested in other control structures.  <br>
  1189. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1190. C++ is a case-sensitive language. <br>
  1191. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The conditional operator is a ternary operator.">
  1192. The conditional operator, ?:, is a binary operator.   <br>
  1193. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1194. The compiler associates an else with the closest if unless specified otherwise using braces {}.  <br>
  1195. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1196.  
  1197. </page>
  1198. </section>
  1199. <section type=Body name=Default title="2.7 The while Repetition Structure">
  1200. <page>
  1201. <font size=18 bold>2.7 The <b>while</b> Repetition Structure</font><hr>
  1202. A <i>repetition structure</i> allows the programmer to specify 
  1203. that an action is to be repeated while some condition 
  1204. remains true. The pseudocode statement<br>
  1205. <font size=3><br></font><indent width=20><font color=blue size=12><i>While there are more items on my shopping list<p>
  1206. <spacer width=20 height=1>Purchase next item and cross it off my list</i></font></indent><font size=3><br></font>
  1207. describes the repetition that occurs during a shopping 
  1208. trip. The condition, "there are more items on my 
  1209. shopping list" may be true or false. If it is true, then the 
  1210. action, "Purchase next item and cross it off my list" is 
  1211. performed. This action will be performed repeatedly 
  1212. while the condition remains <b>true</b>. The statement(s) <br>
  1213.  
  1214. </page>
  1215. <page>
  1216. contained in the <b>while</b> repetition structure constitute the 
  1217. body of the <b>while</b>. The <b>while</b> structure body may be a 
  1218. single statement or a compound statement. <a href="^Errors::c:s0p5"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>Eventually, 
  1219. the condition will become <b>false</b> (when the last item on 
  1220. the shopping list has been purchased and crossed off the 
  1221. list). At this point, the repetition terminates, and the 
  1222. first pseudocode statement after the repetition structure 
  1223. is executed.<br>
  1224. <spacer width=16 height=1>As an example of an <a href="^Errors::c:s0p3"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>actual  <b>while</b>, consider a program 
  1225. segment designed to find the first power of 2 larger than 
  1226. 1000. Suppose the integer variable <b>product</b> has been 
  1227. initialized to 2. When the following <b>while</b> repetition <br>
  1228.  
  1229. </page>
  1230. <page>
  1231. structure finishes executing, <b>product</b> will contain the 
  1232. desired answer:<br>
  1233. <font size=2><br></font><font size=11><pre>
  1234. int product = 2;<p>
  1235. while ( product <= 1000 )<p>
  1236.    product = 2 * product;<p>
  1237. </pre></font>
  1238. The flowchart of  <a href="^Illustration::c:s0p7"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.5</a> illustrates the flow of control 
  1239. in the <b>while</b> structure that corresponds to the preceding 
  1240. <b>while</b> structure. Once again, note that (besides small 
  1241. circles and arrows) the flowchart contains only a 
  1242. rectangle symbol and a diamond symbol. Imagine a 
  1243. deep bin of empty <b>while</b> structures that may be stacked 
  1244. and nested with other control structures to form a 
  1245. structured implementation of an algorithm's flow of <br>
  1246.  
  1247. </page>
  1248. <page>
  1249. control. The empty rectangles and diamonds are then 
  1250. filled in with appropriate actions and decisions. The 
  1251. flowchart clearly shows the repetition. The flowline 
  1252. emerging from the rectangle wraps back to the decision 
  1253. that is tested each time through the loop until the 
  1254. decision becomes <b>false</b>. Then, the while structure 
  1255. exits and control passes to the next statement in the 
  1256. program.<br>
  1257. When the <b>while</b> structure is entered, the value of 
  1258. <b>product</b> is 2. The variable <b>product</b> is repeatedly 
  1259. multiplied by 2, taking on the values 4, 8, 16, 32, 64, 
  1260. 128, 256, 512, and 1024 successively. When <b>product</b> 
  1261. becomes 1024, the <b>while</b> structure condition, <b>product 
  1262. </b><br>
  1263.  
  1264. </page>
  1265. <page>
  1266. <b><= 1000</b>, becomes <b>false</b>. This terminates the 
  1267. repetition--the final value of <b>product</b> is 1024. Program 
  1268. execution continues with the next statement after the 
  1269. <b>while</b>.<br>
  1270.  
  1271. </page>
  1272. <page>
  1273. <b>Select the true statement(s). </b><br>
  1274. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The while repetition structure has one statement by default.">
  1275. The while repetition structure has two statements in the body by default. <br>
  1276. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1277. If the while loop's condition is initially false, the loop's body will not be executed.  <br>
  1278. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1279. Repetition structures allow statements to be repeated until some condition becomes false. <br>
  1280. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1281.  
  1282. </page>
  1283. </section>
  1284. <section type=Body name=Default title="2.8 Formulating Algorithms: Case Study 1 (Counter-Controlled Repetition)">
  1285. <page>
  1286. <font size=18 bold>2.8 Formulating Algorithms: Case Study 1 
  1287. (Counter-Controlled Repetition)</font><hr>
  1288. To illustrate how algorithms are developed, we solve 
  1289. several variations of a class averaging problem. 
  1290. Consider the following problem statement:<br>
  1291. <font size=6><br></font><indent width=16><font size=14><i>A class of ten students took a quiz. The grades (integers in 
  1292. the range 0 to 100) for this quiz are available to you. Determine the class average on the quiz.</i></font></indent><font size=6><br></font>
  1293. The class average is equal to the sum of the grades 
  1294. divided by the number of students. The algorithm for 
  1295. solving this problem on a computer must input each of <br>
  1296.  
  1297. </page>
  1298. <page>
  1299. the grades, perform the averaging calculation, and print 
  1300. the result. <br>
  1301. <spacer width=16 height=1>Let us use pseudocode to list the actions to be executed 
  1302. and specify the order in which these actions should be 
  1303. executed. We use <i>counter-controlled repetition</i> to input 
  1304. the grades one at a time. This technique uses a variable 
  1305. called a<i> counter</i> to control the number of times a set of 
  1306. statements will execute. In this example, repetition 
  1307. terminates when the counter exceeds 10. In this section, 
  1308. we present a pseudocode algorithm ( <a href="^Illustration::c:s0p8"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.6</a>) and the 
  1309. corresponding program (<a href="^Code::c:s0p0"> </a> <a href="^Code::c:s0p0"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.7</a>). In the next section, 
  1310. we show how pseudocode algorithms are developed. 
  1311. Counter-controlled repetition is often called <i>definite</i> <br>
  1312.  
  1313. </page>
  1314. <page>
  1315. <i>repetition</i> because the number of repetitions is known 
  1316. before the loop begins executing.<br>
  1317. <spacer width=16 height=1>Note the references in the algorithm to a total and a 
  1318. counter. A <i>total</i> is a variable used to accumulate the 
  1319. sum of a series of values. A counter is a variable used to 
  1320. count--in this case, to count the number of grades 
  1321. entered. Variables used to store totals should normally 
  1322. be initialized to zero before being used in a program; 
  1323. otherwise, the sum would include the previous value 
  1324. stored in the total's memory location. <br>
  1325. <spacer width=16 height=1>Counter variables are normally <a href="^Practice::c:s0p6"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>initialized to zero or 
  1326. one, depending on their use (we will present examples 
  1327. showing each of these uses). <a href="^Errors::c:s0p7"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>An uninitialized variable <br>
  1328.  
  1329. </page>
  1330. <page>
  1331. contains a "<i>garbage</i>" <i>value</i> (also called an <i>undefined 
  1332. value</i>)--the value last stored in the memory location 
  1333. reserved for that <a href="^Practice::c:s0p7"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>variable. <br>
  1334. <spacer width=16 height=1>Note that the averaging calculation in the program 
  1335. produced an integer result. Actually, the sum of the 
  1336. grades in this example is 817 which when divided by 10 
  1337. should yield 81.7, i.e., a number with a decimal point. 
  1338. We will see how to deal with such numbers (called 
  1339. floating-point numbers) in the next section.<br>
  1340. <spacer width=16 height=1>In   <a href="^Code::c:s0p0"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.7</a>, if line 25 <a href="^Errors::c:s0p8"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>used <b>gradeCounter</b> rather than 
  1341. 10 for the calculation, the output for this program 
  1342. would display a value of 74.<br>
  1343.  
  1344. </page>
  1345. </section>
  1346. <section type=Body name=Default title="2.9 Formulating Algorithms with Top-Down, Stepwise Refinement: Case Study 2 (Sentinel-Controlled Repetition)">
  1347. <page>
  1348. <font size=18 bold>2.9 Formulating Algorithms with Top-
  1349. Down, Stepwise Refinement: Case Study 2 
  1350. (Sentinel-Controlled Repetition)</font><hr>
  1351. Let us generalize the class average problem. Consider 
  1352. the following problem:<br>
  1353. <font size=6><br></font><indent width=16><font size=14><i>Develop a class averaging program that will process an 
  1354. arbitrary number of grades each time the program is run.</i></font></indent><font size=6><br></font>
  1355. In the first class average example, the number of grades 
  1356. (10) was known in advance. In this example, no 
  1357. indication is given of how many grades are to be 
  1358. entered. The program must process an arbitrary number <br>
  1359.  
  1360. </page>
  1361. <page>
  1362. of grades. How can the program determine when to stop 
  1363. the input of grades? How will it know when to calculate 
  1364. and print the class average?<br>
  1365. <spacer width=16 height=1>One way to solve this problem is to use a special value 
  1366. called a <i>sentinel value</i> (also called a <i>signal value</i>, a 
  1367. <i>dummy value</i>, or a <i>flag value</i>) to indicate "end of data 
  1368. entry." The user types grades in until all legitimate 
  1369. grades have been entered. The user then types the 
  1370. sentinel value to indicate that the last grade has been 
  1371. entered. Sentinel-controlled repetition is often called 
  1372. <i>indefinite repetition</i> because the number of repetitions 
  1373. is not known before the loop begins executing.<br>
  1374.  
  1375. </page>
  1376. <page>
  1377. <a href="^Errors::c:s0p10"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>Clearly, the sentinel value must be chosen so that it 
  1378. cannot be confused with an acceptable input value. 
  1379. Because grades on a quiz are normally nonnegative 
  1380. integers, 1 is an acceptable sentinel value for this 
  1381. problem. Thus, a run of the class average program 
  1382. might process a stream of inputs such as 95, 96, 75, 74, 
  1383. 89, and 1. The program would then compute and print 
  1384. the class average for the grades 95, 96, 75, 74, and 89 (
  1385. 1 is the sentinel value, so it should not enter into the 
  1386. averaging calculation).<br>
  1387. <spacer width=16 height=1>We approach the class average program with a 
  1388. technique called <i>top-down</i>, <i>stepwise refinement</i>, a 
  1389. technique that is essential to the development of well-<br>
  1390.  
  1391. </page>
  1392. <page>
  1393. structured programs. We begin with a pseudocode 
  1394. representation of the <i>top</i>: <br>
  1395. <font size=3><br></font><indent width=20><font color=blue size=12><i>Determine the class average for the quiz</i></font></indent><font size=3><br></font>
  1396. The top is a single statement that conveys the overall 
  1397. function of the program. As such, the top is, in effect, a 
  1398. complete representation of a program. Unfortunately, 
  1399. the top (as in this case) rarely conveys a sufficient 
  1400. amount of detail from which to write the C++ program. 
  1401. So we now begin the refinement process. We divide the 
  1402. top into a series of smaller tasks and list these in the 
  1403. order in which they need to be performed. This results 
  1404. in the following <i>first refinement</i>.<br>
  1405. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize variables<p></i></font></indent><font size=3><br></font>
  1406.  
  1407. </page>
  1408. <page>
  1409. <font size=3><br></font><indent width=20><font color=blue size=12><i>Input, sum, and count the quiz grades<p>
  1410. Calculate and print the class average</i></font></indent><font size=3><br></font>
  1411. Here, only the sequence structure has been used--the  
  1412. <a href="^Engineer::c:s0p7"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>steps listed are to be executed in order, one after the 
  1413. other. <br>
  1414. <spacer width=16 height=1> <a href="^Engineer::c:s0p5"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>The preceding Software Engineering Observation is 
  1415. often all you need for the first refinement in the top-
  1416. down process. To proceed to the next level of 
  1417. refinement, i.e., the <i>second refinement</i>, we commit to 
  1418. specific variables. We need a running total of the 
  1419. numbers, a count of how many numbers have been 
  1420. processed, a variable to receive the value of each grade <br>
  1421.  
  1422. </page>
  1423. <page>
  1424. as it is input, and a variable to hold the calculated 
  1425. average. The pseudocode statement <br>
  1426. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize variables</i></font></indent><font size=3><br></font>
  1427. may be refined as follows:<br>
  1428. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize total to zero<spacer width=20 height=1><p>
  1429. Initialize counter to zero<spacer width=20 height=1></i></font></indent><font size=3><br></font>
  1430. Notice that only the variables <i>total</i> and <i>counter</i> need to 
  1431. be initialized before they are used; the variables 
  1432. <i>average</i> and <i>grade</i> (for the calculated average and the 
  1433. user input, respectively) need not be initialized because 
  1434. their values will be written over as they are calculated 
  1435. or input. <br>
  1436. <spacer width=16 height=1>The pseudocode statement<br>
  1437.  
  1438. </page>
  1439. <page>
  1440. <font size=3><br></font><indent width=20><font color=blue size=12><i>Input, sum, and count the quiz grades</i></font></indent><font size=3><br></font>
  1441. requires a repetition structure (i.e., a loop) that 
  1442. successively inputs each grade. Because we do not 
  1443. know in advance how many grades are to be processed, 
  1444. we will use sentinel-controlled repetition. The user will 
  1445. type legitimate grades in one at a time. After the last 
  1446. legitimate grade is typed, the user will type the sentinel 
  1447. value. The program will test for the sentinel value after 
  1448. each grade is input and will terminate the loop when the 
  1449. sentinel value is entered by the user. The second 
  1450. refinement of the preceding pseudocode statement is 
  1451. then<br>
  1452. <font size=3><br></font><indent width=20><font color=blue size=12><i>Input the first grade (possibly the sentinel)<p></i></font></indent><font size=3><br></font>
  1453.  
  1454. </page>
  1455. <page>
  1456. <font size=3><br></font><indent width=20><font color=blue size=12><i>While the user has not as yet entered the sentinel<p>
  1457. <spacer width=20 height=1>Add this grade into the running total<p>
  1458. <spacer width=20 height=1>Add one to the grade counter<p>
  1459. <spacer width=20 height=1>Input the next grade (possibly the sentinel)</i></font></indent><font size=3><br></font>
  1460. Notice that in pseudocode, we do not use braces around 
  1461. the set of statements that form the body of the <b>while</b> 
  1462. structure. We simply indent the statements under the 
  1463. <b>while</b> to show that they belong to the <b>while</b>. Again, 
  1464. pseudocode is only an informal program development 
  1465. aid.<br>
  1466. <spacer width=16 height=1>The pseudocode statement<br>
  1467. <font size=3><br></font><indent width=20><font color=blue size=12><i>Calculate and print the class average</i></font></indent><font size=3><br></font>
  1468. may be refined as follows:<br>
  1469.  
  1470. </page>
  1471. <page>
  1472. <font size=3><br></font><indent width=20><font color=blue size=12><i>If the counter is not equal to zero<p>
  1473. <spacer width=20 height=1>Set the average to the total divided by the counter<p>
  1474. <spacer width=20 height=1>Print the average<p>
  1475. else<p>
  1476. <spacer width=20 height=1>Print "No grades were entered"</i></font></indent><font size=3><br></font>
  1477. Notice that we are being careful here to test for the 
  1478. possibility of div<a href="^Errors::c:s0p11"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>ision by zero--a<i> fatal logic error</i> that 
  1479. if undetected would cause the <a href="^Practice::c:s0p8"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>program to fail (often 
  1480. called "<i>bombing</i>" or "<i>crashing</i>"). The complete 
  1481. second refinement of the pseudocode for the class 
  1482. average problem is shown in  <a href="^Illustration::c:s0p9"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.8</a>.<br>
  1483. <spacer width=16 height=1>In  <a href="^Illustration::c:s0p8"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.6</a> and  <a href="^Illustration::c:s0p9"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.8</a>, we include some completely 
  1484. blank lines in the pseudocode to make the pseudocode <br>
  1485.  
  1486. </page>
  1487. <page>
  1488. more readable. The blank lines separate these programs 
  1489. into their various phases. <br>
  1490. <spacer width=16 height=1>The pseudocode algorithm in <a href="^Illustration::c:s0p9"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.8</a> solves the more 
  1491. general class averaging problem. This algorithm was 
  1492. developed after only two levels of refinement.  
  1493. <a href="^Engineer::c:s0p8"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>Sometimes more levels are necessary.<br>
  1494. <spacer width=16 height=1>The C++ program and a sample execution are shown in  
  1495. <a href="^Code::c:s0p1"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.9</a>. Although only integer grades are entered, the 
  1496. averaging calculation is likely to produce a number 
  1497. with a decimal point, i.e., a real number. The type <b>int</b> 
  1498. cannot represent real numbers. The program introduces 
  1499. the data type <b>float</b> to handle numbers with decimal 
  1500. points (also called <i>floating-point numbers</i>) and <br>
  1501.  
  1502. </page>
  1503. <page>
  1504. introduces a special operator called a <i>cast operator</i> to 
  1505. handle the averaging calculation. These features are 
  1506. explained in detail after the program is presented.<br>
  1507. <spacer width=16 height=1>Notice the compound statement in the <b>while</b> loop in  
  1508. <a href="^Code::c:s0p1"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig 2.9</a>. Without the braces, the last three statements in 
  1509. the body of the loop would fall outside the loop, 
  1510. causing the computer to interpret this code incorrectly 
  1511. as follows<br>
  1512. <font size=2><br></font><font size=11><pre>
  1513. while ( grade != -1 )<p>
  1514.    total = total + grade;<p>
  1515. gradeCounter = gradeCounter + 1;<p>
  1516. cout << "Enter grade, -1 to end: ";<p>
  1517. cin >> grade;<p>
  1518. </pre></font>
  1519.  
  1520. </page>
  1521. <page>
  1522. This would cause an infinite loop if the user does not 
  1523. input 1 for the first grade. <br>
  1524. <spacer width=16 height=1>Notice that the statement<br>
  1525. <font size=2><br></font><font size=11><pre>
  1526. cin >> grade;<p>
  1527. </pre></font>
  1528. is preceded by an output statement that  <a href="^Practice::c:s0p11"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>prompts the 
  1529. user for input.<br>
  1530. <spacer width=16 height=1>Averages do not <a href="^Practice::c:s0p10"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>always evaluate to integer values. 
  1531. Often, an average is a value such as 7.2 or -93.5 that 
  1532. contains a fractional part. These values are referred to 
  1533. as floating-point numbers and are represented by the 
  1534. data type <b>float</b>. The variable <b>average</b> is declared to be 
  1535. of type <b>float</b> to capture the fractional result of our 
  1536. calculation. However, the result of the calculation <b>total 
  1537. </b><br>
  1538.  
  1539. </page>
  1540. <page>
  1541. <b>/ counter</b> is an integer because <b>total</b> and <b>counter</b> are 
  1542. both integer variables. Dividing two integers results in 
  1543. <i>integer division</i> in which any fractional part of the 
  1544. calculation is lost (i.e., <i>truncated</i>). Because the 
  1545. calculation is performed first, the fractional part is lost 
  1546. before the result is assigned to <b>average</b>. To produce a 
  1547. floating-point calculation with integer values, we must 
  1548. create temporary values that are floating-point numbers 
  1549. for the calculation. C++ provides the <i>unary cast 
  1550. operator</i> to accomplish this task. The statement<br>
  1551. <font size=2><br></font><font size=11><pre>
  1552. average = static_cast< float >( total ) / gradeCounter; <p>
  1553. </pre></font>
  1554.  
  1555. </page>
  1556. <page>
  1557. includes the cast operator <b>static_cast< float >()</b> which 
  1558. creates a temporary floating-point copy of its operand 
  1559. in parentheses--<b>total</b>. Using a cast operator in this 
  1560. manner is called <i>explicit conversion</i>. The value stored 
  1561. in <b>total</b> is still an integer. The calculation now consists 
  1562. of a floating-point value (the temporary <b>float</b> version of 
  1563. <b>total</b>) divided by the integer <b>counter</b>. <br>
  1564. <spacer width=16 height=1>The C++ compiler only knows how to evaluate 
  1565. expressions in which the data types of the operands are 
  1566. identical. To ensure that the operands are of the same 
  1567. type, the compiler performs an operation called 
  1568. <i>promotion</i> (also called <i>implicit conversion</i>) on selected 
  1569. operands. For example, in an expression containing the <br>
  1570.  
  1571. </page>
  1572. <page>
  1573. data types <b>int</b> and <b>float</b>, <b>int</b> operands are <i>promoted</i> to 
  1574. <b>float</b>. In our example, after <b>counter</b> is promoted to 
  1575. <b>float</b>, the calculation is performed and the result of the 
  1576. floating-point division is assigned to <b>average</b>. Later in 
  1577. this chapter we discuss all the standard data types and 
  1578. their order of promotion.<br>
  1579. <spacer width=16 height=1>Cast operators are available for any data type. The 
  1580. <b>static_cast</b> operator is formed by following keyword 
  1581. <b>static_cast</b> with angle brackets (<b><</b> and <b>></b>) around a data 
  1582. type name. The cast operator is a <i>unary operator</i>, i.e., 
  1583. an operator that takes only one operand. In Chapter 1, 
  1584. we studied the binary arithmetic operators. C++ also 
  1585. supports unary versions of the plus (<b>+</b>) and minus (<b>-</b>) <br>
  1586.  
  1587. </page>
  1588. <page>
  1589. operators, so the programmer can write expressions like 
  1590. <b>-7</b> or <b>+5</b>. Cast operators associate from right to left and 
  1591. have higher precedence than other unary operators such 
  1592. as unary <b>+</b> and unary <b>-</b>. This precedence is higher than 
  1593. that of the <i>multiplicative operators</i> <b>*</b>, <b>/</b>, and <b>%</b>, and 
  1594. lower than that of parentheses. We indicate the cast 
  1595. operator with the notation <b>static_cast< type>()</b> in our 
  1596. precedence charts.<br>
  1597. <spacer width=16 height=1>The formatting capabilities in <a href="^Code::c:s0p1"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.9</a> are explained in 
  1598. depth in Chapter 11 and discussed here briefly. The call 
  1599. <b>setprecision(2)</b> in the output statement <br>
  1600.  
  1601. </page>
  1602. <page>
  1603. <font size=2><br></font><font size=11><pre>
  1604. cout << "Class average is " << setprecision( 2 )<p>
  1605.      << setiosflags(ios::fixed | ios::showpoint)<p>
  1606.      << average << endl;<p>
  1607. </pre></font>
  1608. indicates that <b>float</b> variable <b>average</b> is to be printed 
  1609. with two digits of <i>precision</i> to the right of the decimal 
  1610. point (e.g., 92.37). This call is referred to as a 
  1611. <i>parameterized stream manipulator</i>. Programs that use 
  1612. these calls must contain the preprocessor directive<br>
  1613. <font size=2><br></font><font size=11><pre>
  1614. #include <iomanip.h><p>
  1615. </pre></font>
  1616. Note that <b>endl</b> is a <i>nonparameterized stream 
  1617. manipulator</i> and does not require the <b>iomanip.h</b> header 
  1618. file. If the precision is not specified, floating-point 
  1619. values are normally output with six digits of precision <br>
  1620.  
  1621. </page>
  1622. <page>
  1623. (i.e., the <i>default precision</i>), although we will see an 
  1624. exception to this in a moment. <br>
  1625. <spacer width=16 height=1>The stream manipulator <b>setiosflags( ios::fixed | 
  1626. ios::showpoint )</b> in the preceding statement sets two 
  1627. output formatting options, namely <b>ios::fixed</b> and 
  1628. <b>ios::showpoint</b>. The vertical bar character (<b>|</b>) separates 
  1629. multiple options in a <b>setiosflags</b> call (we will explain 
  1630. the <b>|</b> notation in depth in Chapter 16). The option 
  1631. <b>ios::fixed</b> causes a floating-point value to be output in 
  1632. so-called <i>fixed-point format</i> (as opposed to <i>scientific 
  1633. notation</i> which we will discuss in Chapter 11). The 
  1634. <b>ios::showpoint</b> option forces the decimal point and 
  1635. trailing zeros to print even if the value is a whole <br>
  1636.  
  1637. </page>
  1638. <page>
  1639. number amount such as 88.00. Without the 
  1640. <b>ios::showpoint</b> option, such a value prints in C++ as 88 
  1641. without the trailing zeros and without the decimal point. 
  1642. <a href="^Errors::c:s0p12"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>When the preceding formatting is used in a program, 
  1643. the printed <a href="^Practice::c:s0p12"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>value is <i>rounded</i> to the indicated number of 
  1644. decimal positions, although the value in memory 
  1645. remains unaltered. For example, the values 87.945 and 
  1646. 67.543 are output as 87.95 and 67.54, respectively.<br>
  1647. <spacer width=16 height=1>Despite the fact that floating-point numbers are not 
  1648. always "100% precise," they have numerous 
  1649. applications. For example, when we speak of a 
  1650. "normal" body temperature of 98.6 we do not need to 
  1651. be precise to a large number of digits. When we view <br>
  1652.  
  1653. </page>
  1654. <page>
  1655. the temperature on a thermometer and read it as 98.6, it 
  1656. may actually be 98.5999473210643. The point here is 
  1657. that calling this number simply 98.6 is fine for most 
  1658. applications. <br>
  1659. <spacer width=16 height=1>Another way floating-point numbers develop is through 
  1660. division. When we divide 10 by 3, the result is 
  1661. 3.3333333\xc9  with the sequence of 3s repeating 
  1662. infinitely. The computer allocates only a fixed amount 
  1663. of space to hold such a value, so clearly the stored 
  1664. floating-point value can only be an approximation.<br>
  1665.  
  1666. </page>
  1667. <page>
  1668. <b>Drag the correct term to the box associated with the 
  1669. attribute:</b><br>
  1670. <component type="drag" width=152 height=18 label="sentinel-controlled" name="sentinel-controlled">   <component type="drag" width=144 height=18 label="counter-controlled" name="counter-controlled">   <component type="drag" width=24 height=18 label="int" name="int">   <component type="drag" width=88 height=18 label="static_cast" name="static_cast">   <br>
  1671. Dividing 22 by 8 yields this data type.<component type="drop" width=160 height=18 name="int">  <br>
  1672. Type of repetition where the number of repetitions is not known in advance.<component type="drop" width=160 height=18 name="sentinel-controlled">  <br>
  1673. Operator used to convert from one data type to another.<component type="drop" width=160 height=18 name="static_cast">  <br>
  1674. Type of repetition where the number of repetitions in known in advance.<component type="drop" width=160 height=18 name="counter-controlled">  <br>
  1675. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1676.  
  1677. </page>
  1678. </section>
  1679. <section type=Body name=Default title="2.10 Formulating Algorithms with Top-Down, Stepwise Refinement: Case Study 3 (Nested Control Structures)">
  1680. <page>
  1681. <font size=18 bold>2.10 Formulating Algorithms with Top-
  1682. Down, Stepwise Refinement: Case Study 3 
  1683. (Nested Control Structures)</font><hr>
  1684. Let us work another complete problem. We will once 
  1685. again formulate the algorithm using pseudocode and 
  1686. top-down, stepwise refinement, and write a 
  1687. corresponding C++ program. We have seen that control 
  1688. structures may be stacked on top of one another (in 
  1689. sequence) just as a child stacks building blocks. In this 
  1690. case study we will see the only other structured way 
  1691. control structures may be connected in C++, namely 
  1692. through <i>nesting</i> of one control structure within another.<br>
  1693.  
  1694. </page>
  1695. <page>
  1696. Consider the following problem statement:<br>
  1697. <font size=6><br></font><indent width=16><font size=14><i>A college offers a course that prepares students for the 
  1698. state licensing exam for real estate brokers. Last year, 
  1699. several of the students who completed this course took the 
  1700. licensing examination. Naturally, the college wants to 
  1701. know how well its students did on the exam. You have 
  1702. been asked to write a program to summarize the results. 
  1703. You have been given a list of these 10 students. Next to 
  1704. each name is written a 1 if the student passed the exam 
  1705. and a 2 if the student failed.</i></font></indent><font size=6><br></font>
  1706. Your program should analyze the results of the exam as 
  1707. follows:<br>
  1708.  
  1709. </page>
  1710. <page>
  1711. 1. Input each test result (i.e., a 1 or a 2). Display the 
  1712. message "Enter result" on the screen each time the program requests another test result.<br>
  1713. 2. Count the number of test results of each type.<br>
  1714. 3. Display a summary of the test results indicating the 
  1715. number of students who passed and the number of students who failed.<br>
  1716. 4. If more than 8 students passed the exam, print the 
  1717. message "Raise tuition."<br>
  1718. After reading the problem statement carefully, we make 
  1719. the following observations:<br>
  1720.  
  1721. </page>
  1722. <page>
  1723. 1. The program must process 10 test results. A counter-
  1724. controlled loop will be used.<br>
  1725. 2. Each test result is a number--either a 1 or a 2. Each 
  1726. time the program reads a test result, the program must 
  1727. determine if the number is a 1 or a 2. We test for a 1 in 
  1728. our algorithm. If the number is not a 1, we assume that 
  1729. it is a 2. (An exercise at the end of the chapter considers 
  1730. the consequences of this assumption.)<br>
  1731. 3. Two counters are used--one to count the number of 
  1732. students who passed the exam and one to count the 
  1733. number of students who failed the exam.<br>
  1734. 4. After the program has processed all the results, it 
  1735. must decide if more than 8 students passed the exam.<br>
  1736.  
  1737. </page>
  1738. <page>
  1739. Let us proceed with top-down, stepwise refinement. We 
  1740. begin with a pseudocode representation of the top:<br>
  1741. <font size=3><br></font><indent width=20><font color=blue size=12><i>Analyze exam results and decide if tuition should be raised</i></font></indent><font size=3><br></font>
  1742. Once again, it is important to emphasize that the top is a 
  1743. complete representation of the program, but several 
  1744. refinements are likely to be needed before the 
  1745. pseudocode can be naturally evolved into a C++ 
  1746. program. Our first refinement is<br>
  1747. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize variables<p>
  1748. Input the ten quiz grades and count passes and failures<p>
  1749. Print a summary of the exam results and decide if tuition should be 
  1750. raised</i></font></indent><font size=3><br></font>
  1751.  
  1752. </page>
  1753. <page>
  1754. Here, too, even though we have a complete 
  1755. representation of the entire program, further refinement 
  1756. is necessary. We now commit to specific variables. 
  1757. Counters are needed to record the passes and failures, a 
  1758. counter will be used to control the looping process, and 
  1759. a variable is needed to store the user input. The 
  1760. pseudocode statement<br>
  1761. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize variables</i></font></indent><font size=3><br></font>
  1762. may be refined as follows:<br>
  1763. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize passes to zero<spacer width=20 height=1><p>
  1764. Initialize failures to zero<spacer width=20 height=1><p>
  1765. Initialize student counter to one<spacer width=20 height=1></i></font></indent><font size=3><br></font>
  1766.  
  1767. </page>
  1768. <page>
  1769. Notice only the counters and totals are initialized. The 
  1770. pseudocode statement<br>
  1771. <font size=3><br></font><indent width=20><font color=blue size=12><i>Input the ten quiz grades and count passes and failures</i></font></indent><font size=3><br></font>
  1772. requires a loop that successively inputs the result of 
  1773. each exam. Here it is known in advance that there are 
  1774. precisely ten exam results, so counter-controlled 
  1775. looping is appropriate. Inside the loop (i.e., <i>nested</i> 
  1776. within the loop) a double-selection structure will 
  1777. determine whether each exam result is a pass or a 
  1778. failure, and will increment the appropriate counter 
  1779. accordingly. The refinement of the preceding 
  1780. pseudocode statement is then<br>
  1781. <font size=3><br></font><indent width=20><font color=blue size=12><i>While student counter is less than or equal to ten<p></i></font></indent><font size=3><br></font>
  1782.  
  1783. </page>
  1784. <page>
  1785. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Input the next exam result</i></font></indent><font size=3><br></font>
  1786. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>If the student passed<p>
  1787. <spacer width=20 height=1><spacer width=20 height=1>Add one to passes<p>
  1788. <spacer width=20 height=1>else<p>
  1789. <spacer width=20 height=1><spacer width=20 height=1>Add one to failures</i></font></indent><font size=3><br></font>
  1790. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Add one to student counter</i></font></indent><font size=3><br></font>
  1791. Notice the use of blank lines to set off the <b>If/else</b> control 
  1792. structure to improve program readability. The 
  1793. pseudocode statement<br>
  1794. <font size=3><br></font><indent width=20><font color=blue size=12><i>Print a summary of the exam results and decide if tuition should be 
  1795. raised</i></font></indent><font size=3><br></font>
  1796. may be refined as follows:<br>
  1797. <font size=3><br></font><indent width=20><font color=blue size=12><i>Print the number of passes<p>
  1798. Print the number of failures<p></i></font></indent><font size=3><br></font>
  1799.  
  1800. </page>
  1801. <page>
  1802. <font size=3><br></font><indent width=20><font color=blue size=12><i>If more than eight students passed <p>
  1803. <spacer width=20 height=1>Print "Raise tuition"</i></font></indent><font size=3><br></font>
  1804. The complete second refinement appears in  <a href="^Illustration::c:s0p10"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.10</a>. 
  1805. Notice that blank lines are also used to set off the <b>while</b> 
  1806. structure for program readability.<br>
  1807. <spacer width=16 height=1> <a href="^Engineer::c:s0p10"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>This pseudocode is now sufficiently refined for 
  1808. conversion to C++. The C++ program and two sample 
  1809. executions are shown in <a href="^Code::c:s0p2"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.11</a>. Note that we have 
  1810. taken advantage of a feature of C++ that allows variable 
  1811. initialization to be incorporated into declarations. 
  1812. Looping programs may require initialization at the 
  1813. beginning of each repetition; such <a href="^Practice::c:s0p13"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>initialization would 
  1814. <a href="^Engineer::c:s0p12"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>normally occur in assignment statements.<br>
  1815.  
  1816. </page>
  1817. <page>
  1818. <b>Select the true statement(s). </b><br>
  1819. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1820. C++ allows variable initialization to be incorporated into declarations. <br>
  1821. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. Variables normally contain "garbage" values by default.">
  1822. Variables are initialized to 0 by default. <br>
  1823. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1824. The most difficult part of solving a computer problem is usually developing the algorithm.  <br>
  1825. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1826.  
  1827. </page>
  1828. </section>
  1829. <section type=Body name=Default title="2.11 Assignment Operators">
  1830. <page>
  1831. <font size=18 bold>2.11 Assignment Operators</font><hr>
  1832. C++ provides several assignment operators for 
  1833. abbreviating assignment expressions. For example the 
  1834. statement<br>
  1835. <font size=2><br></font><font size=11><pre>
  1836. c = c + 3;<p>
  1837. </pre></font>
  1838. can be abbreviated with the <i>addition assignment 
  1839. operator</i> <b>+=</b> as<br>
  1840. <font size=2><br></font><font size=11><pre>
  1841. c += 3;<p>
  1842. </pre></font>
  1843. The <b>+=</b> operator adds the value of the expression on the 
  1844. right of the operator to the value of the variable on the 
  1845. left of the operator and stores the result in the variable 
  1846. on the left of the operator. Any statement of the form<br>
  1847.  
  1848. </page>
  1849. <page>
  1850. <font size=2><br></font><font size=11><pre>
  1851. <i>variable</i> = <i>variable</i> <i>operator</i> <i>expression</i>;<p>
  1852. </pre></font>
  1853. where ope<a href="^Perform::c:s0p3"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>rator is one of the binary operators <b>+</b>, <b>-</b>, <b>*</b>, <b>/</b>, 
  1854. or <b>%</b> (or others we will discuss later in the text), can be 
  1855. written in the form <br>
  1856. <font size=2><br></font><font size=11><pre>
  1857. <i>variable</i> <i>operator</i>= <i>expression</i>;<p>
  1858. </pre></font>
  1859. Thus the assignment <b>c += 3</b> adds <b>3</b> to <b>c</b>.  <a href="^Illustration::c:s0p11"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.12</a> 
  1860. shows the arithmetic assignment operators, sample  
  1861. <a href="^Perform::c:s0p5"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>expressions using these operators, and explanations.<br>
  1862.  
  1863. </page>
  1864. <page>
  1865. <b>Drag the correct term to the box associated with the 
  1866. attribute:</b><br>
  1867. <component type="drag" width=16 height=18 label="%=" name="%=">   <component type="drag" width=16 height=18 label="*=" name="*=">   <component type="drag" width=16 height=18 label="-=" name="-=">   <component type="drag" width=16 height=18 label="/=" name="/=">   <component type="drag" width=16 height=18 label="+=" name="+=">   <component type="drag" width=16 height=18 label="!=" name="!=">   <component type="drag" width=8 height=18 label="=" name="=">   <component type="drag" width=16 height=18 label="==" name="==">  <br>
  1868. Modulus assignment operator.<component type="drop" width=24 height=18 name="%=">  <br>
  1869. Division assignment operator.<component type="drop" width=24 height=18 name="/=">  <br>
  1870. Equality operator.<component type="drop" width=24 height=18 name="==">  <br>
  1871. Subtraction assignment operator.<component type="drop" width=24 height=18 name="-=">  <br>
  1872. InEquality operator.<component type="drop" width=24 height=18 name="!=">  <br>
  1873. Addition assignment operator.<component type="drop" width=24 height=18 name="+=">  <br>
  1874. Multiplication assignment operator.<component type="drop" width=24 height=18 name="*=">  <br>
  1875. Assignment operator.<component type="drop" width=24 height=18 name="=">  <br>
  1876. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1877.  
  1878. </page>
  1879. </section>
  1880. <section type=Body name=Default title="2.12 Increment and Decrement Operators">
  1881. <page>
  1882. <font size=18 bold>2.12 Increment and Decrement Operators</font><hr>
  1883. C++ also provides the <b>++</b> unary <i>increment operator</i> and 
  1884. the <b>--</b> unary <i>decrement operator</i> that are summarized in  
  1885. <a href="^Illustration::c:s0p12"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.13</a>. If a variable <b>c</b> is incremented by 1, the 
  1886. increment operator <b>++</b> can be used rather than the 
  1887. expressions <b>c = c + 1</b> or <b>c += 1</b>. If an increment or 
  1888. decrement operator is placed before a variable, it is 
  1889. referred to as the <i>preincrement</i> or <i>predecrement</i> 
  1890. <i>operator</i>, respectively. If an increment or decrement 
  1891. operator is placed after a variable, it is referred to as the 
  1892. <i>postincrement</i> or <i>postdecrement</i> <i>operator</i>, respectively. 
  1893. Preincrementing (predecrementing) a variable causes <br>
  1894.  
  1895. </page>
  1896. <page>
  1897. the variable to be incremented (decremented) by 1, then 
  1898. the new value of the variable is used in the expression 
  1899. in which it appears. Postincrementing 
  1900. (postdecrementing) a variable causes the current value 
  1901. of the variable to be used in the expression in which it 
  1902. appears, then the variable value is incremented 
  1903. (decremented) by 1. <br>
  1904. <spacer width=16 height=1>The program of <a href="^Code::c:s0p3"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.14</a> demonstrates the difference 
  1905. between the preincrementing version and the 
  1906. postincrementing version of the <b>++</b> operator. 
  1907. Postincrementing the variable <b>c</b> causes it to be 
  1908. incremented after it is used in the output statement. <br>
  1909.  
  1910. </page>
  1911. <page>
  1912. Preincrementing the variable <b>c</b> causes it to be 
  1913. incremented before it is used in the output statement.<br>
  1914. <spacer width=16 height=1>The program displays the value of <b>c</b> before and after the 
  1915. <b>++</b> operator is used. <a href="^Practice::c:s0p14"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>The decrement operator (<b>--</b>) works 
  1916. similarly. <br>
  1917. <spacer width=16 height=1>The three assignment statements in  <a href="^Code::c:s0p2"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig 2.11
  1918. </a><br>
  1919. <font size=2><br></font><font size=11><pre>
  1920. passes = passes + 1;<p>
  1921. failures = failures + 1;<p>
  1922. student = student + 1;<p>
  1923. </pre></font>
  1924. can be written more concisely with assignment 
  1925. operators as<br>
  1926. <font size=2><br></font><font size=11><pre>
  1927. passes += 1;<p>
  1928. failures += 1;<p>
  1929. student += 1;<p>
  1930. </pre></font>
  1931.  
  1932. </page>
  1933. <page>
  1934. with preincrement operators as<br>
  1935. <font size=2><br></font><font size=11><pre>
  1936. ++passes;<p>
  1937. ++failures;<p>
  1938. ++student;<p>
  1939. </pre></font>
  1940. or with postincrement operators as<br>
  1941. <font size=2><br></font><font size=11><pre>
  1942. passes++;<p>
  1943. failures++;<p>
  1944. student++;<p>
  1945. </pre></font>
  1946. Note that when incrementing or decrementing a 
  1947. variable in a statement by itself, the preincrement and 
  1948. postincrement forms have the same effect, and the 
  1949. predecrement and postdecrement forms have the same 
  1950. effect. It is only when a variable appears in the context <br>
  1951.  
  1952. </page>
  1953. <page>
  1954. of a larger expression that preincrementing the variable 
  1955. and postincrementing the variable have different effects 
  1956. (and similarly for predecrementing and 
  1957. postdecrementing).<br>
  1958. <spacer width=16 height=1><a href="^Errors::c:s0p13"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>For now, only a simple variable name may be used as 
  1959. the operand of an increment or decrement operator (we 
  1960. will see that these operators may be used on so-called 
  1961. <i>lvalues</i>).<br>
  1962. <spacer width=16 height=1><a href="^Illustration::c:s0p13"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.15</a> shows the precedence and associativity of 
  1963. the operators introduced to this point. The operators are 
  1964. shown top-to-bottom in decreasing order of precedence. 
  1965. The second column describes the associativity of the 
  1966. operators at each level of precedence. Notice that the <br>
  1967.  
  1968. </page>
  1969. <page>
  1970. conditional operator (<b>?:</b>), the unary operators increment 
  1971. (<b>++</b>), decrement (<b>--</b>), plus (<b>+</b>), minus (<b>-</b>) and casts, and 
  1972. the assignment operators <b>=</b>, <b>+=</b>, <b>-=</b>, <b>*=</b>, <b>/=</b> and <b>%=</b> 
  1973. associate from right to left. All other operators in the 
  1974. operator precedence chart of  <a href="^Illustration::c:s0p13"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.15</a> associate from 
  1975. left to right. The third column names the various groups 
  1976. of operators. <br>
  1977.  
  1978. </page>
  1979. <page>
  1980. <b>Select the true statement(s). </b><br>
  1981. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  1982. The unary decrement operator subtracts one from a variable. <br>
  1983. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The associativity is right to left.">
  1984. The increment operator has left-to-right associativity. <br>
  1985. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The increment and decrement operators can only be applied to variables.">
  1986. The following expression is valid: cout << ++8;. <br>
  1987. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. In the context of larger expressions, predecrementing or postdecrementing can produce different results.">
  1988. Predecrementing and postdecrementing are always equivalent; regardless of the expression. <br>
  1989. <component type=button name=b label="Check Your Answer" width=125 height=24>
  1990.  
  1991. </page>
  1992. </section>
  1993. <section type=Body name=Default title="2.13 Essentials of Counter-Controlled Repetition">
  1994. <page>
  1995. <font size=18 bold>2.13 Essentials of Counter-Controlled Repetition</font><hr>
  1996. Counter-controlled repetition requires:<br>
  1997. 1. The <i>name</i> of a control variable (or loop counter).<br>
  1998. 2. The <i>initial value</i> of the control variable.<br>
  1999. 3. The condition that tests for the <i>final value</i> of the control variable (i.e., whether looping should continue).<br>
  2000. 4. The <i>increment</i> (or <i>decrement</i>) by which the control 
  2001. variable is modified each time through the loop.<br>
  2002. Consider the simple program shown in <a href="^Code::c:s0p4"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.16</a>, 
  2003. which prints the numbers from 1 to 10. The declaration <br>
  2004. <font size=2><br></font><font size=11><pre>
  2005. int counter = 1; <p>
  2006. </pre></font>
  2007.  
  2008. </page>
  2009. <page>
  2010. <i>names</i> the control variable (<b>counter</b>), declares it to be 
  2011. an integer, reserves space for it in memory, and sets it to 
  2012. an <i>initial value</i> of <b>1</b>. Declarations that require 
  2013. initialization are, in effect, executable statements. In 
  2014. C++, it is more precise to call a declaration that also 
  2015. reserves memory--as the preceding declaration does--
  2016. a <i>definition</i>.<br>
  2017. <spacer width=16 height=1>The declaration and initialization of <b>counter</b> also could 
  2018. have been accomplished with the statements<br>
  2019. <font size=2><br></font><font size=11><pre>
  2020. int counter;<p>
  2021. counter = 1;<p>
  2022. </pre></font>
  2023. The declaration is not executable, but the assignment is. 
  2024. We use both methods of initializing variables. <br>
  2025.  
  2026. </page>
  2027. <page>
  2028. The statement<br>
  2029. <font size=2><br></font><font size=11><pre>
  2030. ++counter;<p>
  2031. </pre></font>
  2032. <i>increments</i> the loop counter by 1 each time the loop is 
  2033. performed. The loop-continuation condition in the 
  2034. <b>while</b> structure tests if the value of the control variable 
  2035. is less than or equal to <b>10</b> (the last value for which the 
  2036. condition is <b>true</b>). Note that the <a href="^Practice::c:s0p15"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>body of this <b>while</b> is 
  2037. performed even when the control variable is <b>10</b>. The 
  2038. loop terminates when the control variable exceeds <b>10</b> 
  2039. (i.e., <b>counter</b> becomes <b>11</b>).<br>
  2040. <spacer width=16 height=1><a href="^Practice::c:s0p18"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar> </a>The program in  <a href="^Code::c:s0p4"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.16</a> can be made more concise 
  2041. by initializing <b>counter</b> to <b>0</b> and by replacing the <b>while</b> 
  2042. structure with<br>
  2043.  
  2044. </page>
  2045. <page>
  2046. <font size=2><br></font><font size=11><pre>
  2047. while ( ++counter <= 10 ) <p>
  2048.    cout << counter << endl;<p>
  2049. </pre></font>
  2050. <a href="^Practice::c:s0p16"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>This code saves a statement because the incrementing is 
  2051. done directly in the <b>while</b> condition before the 
  2052. condition is tested. <a href="^Practice::c:s0p17"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>Also, this code eliminates the braces 
  2053. around  <a href="^Errors::c:s0p14"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>the body of the <b>while</b> because the <b>while</b> now 
  2054. contains only one statement. Coding in such a 
  2055. condensed <a href="^Practice::c:s0p19"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>fashion takes some practice.<br>
  2056.  
  2057. </page>
  2058. <page>
  2059. <b>Select the true statement(s). </b><br>
  2060. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2061. Declarations are not considered executable statements.  <br>
  2062. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. A variable can be incremented in the while loop condition.">
  2063. A variable cannot be incremented in a while loop's condition. <br>
  2064. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2065.  
  2066. </page>
  2067. </section>
  2068. <section type=Body name=Default title="2.14 The for Repetition Structure">
  2069. <page>
  2070. <font size=18 bold>2.14 The <tt>for</tt> Repetition Structure</font><hr>
  2071. The <b>for</b> repetition structure handles all the details of 
  2072. counter-controlled repetition. To illustrate the power of 
  2073. <b>for</b>, let us rewrite the program of <a href="^Code::c:s0p4"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.16</a>. The result 
  2074. is shown in <a href="^Code::c:s0p5"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.17</a>. The program operates as follows. <br>
  2075. <spacer width=16 height=1>When the <b>for</b> structure begins executing, the control 
  2076. variable <b>counter</b> is declared and initialized to 1. Then, 
  2077. the loop-continuation condition <b>counter <= 10</b> is 
  2078. checked. Because the initial value of <b>counter</b> is 1, the 
  2079. condition is satisfied, so the body statement prints the 
  2080. value of <b>counter</b>, namely 1. The control variable 
  2081. <b>counter</b> is then incremented in the expression <br>
  2082.  
  2083. </page>
  2084. <page>
  2085. <b>counter++</b>, and the loop begins again with the loop-
  2086. continuation test. Because the control variable is now 
  2087. equal to 2, the final value is not exceeded, so the 
  2088. program performs the body statement again. This 
  2089. process continues until the control variable <b>counter</b> is 
  2090. incremented to 11--this causes the loop-continuation 
  2091. test to fail and repetition terminates. The program 
  2092. continues by performing the first statement after the <b>for</b> 
  2093. structure (in this case, the <b>return</b> statement at the end 
  2094. of the program). <br>
  2095. <spacer width=16 height=1> <a href="^Illustration::c:s0p14"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.18</a> takes a closer look at the <b>for</b> structure of  
  2096. <a href="^Code::c:s0p5"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.17</a>. Notice that the <b>for</b> structure "does it all"--it 
  2097. specifies each of the items needed for counter-<br>
  2098.  
  2099. </page>
  2100. <page>
  2101. controlled repetition with a control variable. If there is 
  2102. more than one statement in the body of the <b>for</b>, braces 
  2103. are required to define the body of the loop. <br>
  2104. <spacer width=16 height=1>Notice that  <a href="^Code::c:s0p5"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.17</a> uses the loop-continuation 
  2105. condition <b>counter <= 10</b>. If the programmer incorrectly 
  2106. wrote <b>counter < 10</b>, then the loop would be executed 
  2107. only 9 times. <a href="^Errors::c:s0p15"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>This is a common logic error   <a href="^Practice::c:s0p21"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>called an 
  2108. <i>off-by-one error</i>.<br>
  2109. The general format of the <b>for</b> structure is <br>
  2110. <font size=2><br></font><font size=11><pre>
  2111. for ( <i>expression1</i>; <i>expression2</i>; <i>expression3 </i>) <p>
  2112.    <i>statement</i><p>
  2113. </pre></font>
  2114. where <i>expression1</i> initializes the loop's control 
  2115. variable, <i>expression2</i> is the loop-continuation <br>
  2116.  
  2117. </page>
  2118. <page>
  2119. condition, and <i>expression3</i> increments the control 
  2120. variable. In most cases the <b>for</b> structure can be 
  2121. represented with an equivalent <b>while</b> structure as 
  2122. follows:<br>
  2123. <font size=2><br></font><font size=11><pre>
  2124. <i>expression1</i>;<p>
  2125. while ( <i>expression2 </i>) {<p>
  2126.    <i>statement<p>
  2127. </i>   <i>expression3</i>;<p>
  2128. }<p>
  2129. </pre></font>
  2130. There is an exception to this rule which we will discuss 
  2131. in <a href="#s18p0">Section 2.18</a>. <br>
  2132. <spacer width=16 height=1>If <i>expression1</i> (the initialization section) in the <b>for</b> 
  2133. structure header defines the control variable (i.e., the <br>
  2134.  
  2135. </page>
  2136. <page>
  2137. control variable's type is specified before the variable 
  2138. name), the control variable can only be used in the body 
  2139. of the <b>for</b> structure, i.e., the value of the control 
  2140. variable will be unknown outside the <b>for</b> structure. <a href="^Errors::c:s0p16"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>This 
  2141. restricted use of the control variable name is known as 
  2142. the variable's <i>scope</i>. The sc<a href="^Portable::c:s0p0"><img src="bckgrnds/icons/port_ico.gif" align=sidebar></a>ope of a variable defines 
  2143. where it can be used in a program. Scope is discussed in 
  2144. detail in Chapter 3, "Functions."<br>
  2145. <spacer width=16 height=1>Sometimes, <i>expression1</i> and <i>expression3</i> are comma-
  2146. separated lists of expressions. The commas as used here 
  2147. are <i>comma operators</i> that guarantee lists of expressions 
  2148. evaluate left to right. The comma operator has the 
  2149. lowest precedence of all operators in C++. The value <br>
  2150.  
  2151. </page>
  2152. <page>
  2153. and type of a comma-separated list of expressions is the 
  2154. value and type of the rightmost expression in the list. 
  2155. The comma operator is most often used in <b>for</b> 
  2156. structures. Its primary application is to enable the 
  2157. programmer to use multiple <a href="^Practice::c:s0p24"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>initialization expressions 
  2158. and/or multiple increment expressions. For example, 
  2159. there may be several control variables in a single <b>for</b> 
  2160. structure that must be initialized and incremented. <br>
  2161. <spacer width=16 height=1>The three expressions in the <b>for</b> structure are optional. 
  2162. If <i>expression2</i> is omitted, C++ assumes that the loop-
  2163. continuation condition is true, thus creating an infinite 
  2164. loop. One might omit <i>expression1</i> if the control variable 
  2165. is initialized elsewhere in the program. <i>expression3</i> <br>
  2166.  
  2167. </page>
  2168. <page>
  2169. might be omitted if the increment is calculated by 
  2170. statements in the body of the <b>for</b> or if no increment is 
  2171. needed. The increment expression in the <b>for</b> structure 
  2172. acts like a stand-alone statement at the end of the body 
  2173. of the <b>for</b>. Therefore, the expressions<br>
  2174. <font size=2><br></font><font size=11><pre>
  2175. counter = counter + 1<p>
  2176. counter += 1<p>
  2177. ++counter<p>
  2178. counter++<p>
  2179. </pre></font>
  2180. are all equivalent in the incrementing portion of the <b>for</b> 
  2181. structure. Many programmers prefer the form 
  2182. <b>counter++</b> because the incrementing occurs after the 
  2183. loop body is executed. The postincrementing form <br>
  2184.  
  2185. </page>
  2186. <page>
  2187. therefore seems more natural. Because the variable 
  2188. being incremented here does not appear in an 
  2189. expression, both preincrementing and postincrementing 
  2190. have the same effect. <a href="^Errors::c:s0p19"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>The two semicolons in the <b>for</b> 
  2191. structure <a href="^Errors::c:s0p18"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>are required.<br>
  2192. <spacer width=16 height=1> <a href="^Engineer::c:s0p14"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>The initialization, loop-continuation condition, and 
  2193. increment portions of a <b>for</b> structure can contain 
  2194. arithmetic expressions. For example, assume that <b>x = 2</b> 
  2195. and <b>y = 10</b>. If <b>x</b> and <b>y</b> are not modified in the loop body, 
  2196. the statement<br>
  2197. <font size=2><br></font><font size=11><pre>
  2198. for ( int j = x; j <= 4 * x * y; j += y / x )<p>
  2199. </pre></font>
  2200. is equivalent to the statement<br>
  2201. <font size=2><br></font><font size=11><pre>
  2202. for ( int j = 2; j <= 80; j += 5 )<p>
  2203. </pre></font>
  2204.  
  2205. </page>
  2206. <page>
  2207. The "increment" of a <b>for</b> structure may be negative (in 
  2208. which case it is really a decrement and the loop actually 
  2209. counts downwards).<br>
  2210. <spacer width=16 height=1>If the loop-continuation condition is initially false, the 
  2211. body of the <b>for</b> structure is not performed. Instead, 
  2212. execution proceeds with the statement following the 
  2213. <b>for</b>.<br>
  2214. <spacer width=16 height=1>The control variable is frequently printed or used in 
  2215. calculations in the body of a <b>for</b> structure, but it does 
  2216. not have to be. <a href="^Practice::c:s0p26"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>It is common to use the control variable 
  2217. for controlling repetition while never mentioning it in 
  2218. the body of the <b>for</b> structure.<br>
  2219.  
  2220. </page>
  2221. <page>
  2222. The <b>for</b> structure is flowcharted much like the <b>while</b> 
  2223. structure. For example, the flowchart of the <b>for</b> 
  2224. statement<br>
  2225. <font size=2><br></font><font size=11><pre>
  2226. for ( int counter = 1; counter <= 10; counter++ )<p>
  2227.    cout << counter << endl;<p>
  2228. </pre></font>
  2229. is shown in<a href="^Illustration::c:s0p15">  <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.19</a>. This flowchart makes it clear that 
  2230. the initialization occurs only once and that 
  2231. incrementing occurs each time <i>after</i> the body statement 
  2232. is performed. Note that (besides small circles and 
  2233. arrows) the flowchart contains only rectangle symbols 
  2234. and a diamond symbol. Imagine, again, that the 
  2235. programmer has access to a deep bin of empty <b>for</b> 
  2236. structures--as many as the programmer might need to <br>
  2237.  
  2238. </page>
  2239. <page>
  2240. stack and nest with other control structures to form a 
  2241. structured implementation of an algorithm's flow of 
  2242. control. And again, the rectangles and diamonds are 
  2243. then filled with actions and decisions appropriate to the 
  2244. algorithm.<br>
  2245.  
  2246. </page>
  2247. <page>
  2248. <b>Select the true statement(s). </b><br>
  2249. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2250. If there is more than one statement in the body of a for, braces are required to define the for's body.  <br>
  2251. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2252. The two semicolons within the for header are required syntax. <br>
  2253. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The for loop always executes when the condition is true.">
  2254. If a for loop's condition is initially true, the for loop will not be executed. <br>
  2255. <component type="checkbox" width=20 height=18 label="" name=""  correct=".True.">
  2256. The control variable used in a for loop does not have to be used in the body of the for loop  <br>
  2257. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2258. In a for structure, initialization only occurs once.  <br>
  2259. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2260.  
  2261. </page>
  2262. </section>
  2263. <section type=Body name=Default title="2.15 Examples Using the for Structure">
  2264. <page>
  2265. <font size=18 bold>2.15 Examples Using the <tt>for</tt> Structure</font><hr>
  2266. The following examples show methods of varying the 
  2267. control variable in a <b>for</b> structure. In each case, we 
  2268. write the appropriate <b>for</b> header. <a href="^Errors::c:s0p20"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>Note the change in the 
  2269. relational operator for loops that decrement the control 
  2270. variable.<br>
  2271. 1. <spacer width=20 height=1>Vary the control variable from <b>1</b> to <b>100</b> in increments 
  2272. of <b>1</b>.<br>
  2273. <font size=2><br></font><font size=11><pre>
  2274. for ( int i = 1; i <= 100; i++ )<p>
  2275. </pre></font>
  2276. 2. <spacer width=20 height=1>Vary the control variable from <b>100</b> to <b>1</b> in increments 
  2277. of <b>-1</b> (decrements of <b>1</b>).<br>
  2278. <font size=2><br></font><font size=11><pre>
  2279. for ( int i = 100; i >= 1; i-- )<p>
  2280. </pre></font>
  2281.  
  2282. </page>
  2283. <page>
  2284. 3. <spacer width=20 height=1>Vary the control variable from <b>7</b> to <b>77</b> in steps of <b>7</b>.<br>
  2285. <font size=2><br></font><font size=11><pre>
  2286. for ( int i = 7; i <= 77; i += 7 )<p>
  2287. </pre></font>
  2288. 4. <spacer width=20 height=1>Vary the control variable from <b>20</b> to <b>2</b> in steps of <b>-2</b>.<br>
  2289. <font size=2><br></font><font size=11><pre>
  2290. for ( int i = 20; i >= 2; i -= 2 )<p>
  2291. </pre></font>
  2292. 5. <spacer width=20 height=1>Vary the control variable over the following sequence 
  2293. of values: <b>2</b>, <b>5</b>, <b>8</b>, <b>11</b>, <b>14</b>, <b>17</b>, <b>20</b>.<br>
  2294. <font size=2><br></font><font size=11><pre>
  2295. for ( int j = 2; j <= 20; j += 3 )<p>
  2296. </pre></font>
  2297. 6. <spacer width=20 height=1>Vary the control variable over the following sequence 
  2298. of values: <b>99</b>, <b>88</b>, <b>77</b>, <b>66</b>, <b>55</b>, <b>44</b>, <b>33</b>, <b>22</b>, <b>11</b>, <b>0</b>.<br>
  2299. <font size=2><br></font><font size=11><pre>
  2300. for ( int j = 99; j >= 0; j -= 11 )<p>
  2301. </pre></font>
  2302.  
  2303. </page>
  2304. <page>
  2305. The next two examples provide simple applications of 
  2306. the <b>for</b> structure. The program of   <a href="^Code::c:s0p6"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.20</a> uses the <b>for</b> 
  2307. structure to sum all the even integers from <b>2</b> to <b>100</b>. <br>
  2308. <spacer width=16 height=1>Note that the body of the <b>for</b> structure in <a href="^Code::c:s0p6"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.20</a> 
  2309. could actually be merged into the rightmost portion of 
  2310. the <b>for</b> header by using the comma operator as follows:<br>
  2311. <font size=2><br></font><font size=11><pre>
  2312. for ( int number = 2;             // initialization<p>
  2313.       number <= 100;              // continuation condition<p>
  2314.       sum += number, number += 2) // total and increment<p>
  2315.    ;<p>
  2316. </pre></font>
  2317. The initialization <b>sum = 0</b> could also be <a href="^Practice::c:s0p27"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>merged into the 
  2318. initialization section of the <b>for</b>.<br>
  2319.  
  2320. </page>
  2321. <page>
  2322.  <a href="^Practice::c:s0p28"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>The next example computes compound interest using 
  2323. the <b>for</b> structure. Consider the following problem 
  2324. statement: <br>
  2325. <font size=6><br></font><indent width=16><font size=14><i>A person invests $1000.00 in a savings account yielding 5 
  2326. percent interest. Assuming that all interest is left on deposit in the account, calculate and print the amount of 
  2327. money in the account at the end of each year for 10 years. 
  2328. Use the following formula for determining these amounts:</i></font></indent><font size=6><br></font>
  2329. <font size=2><br></font><font size=11><pre>
  2330. <i>a</i> = <i>p</i> (1 + <i>r</i>) <i>n</i><p>
  2331. </pre></font>
  2332. <font size=6><br></font><indent width=16><font size=14><i>where</i></font></indent><font size=6><br></font>
  2333. <font size=2><br></font><font size=11><pre>
  2334. <i>p</i> is the original amount invested (i.e., the principal),<p>
  2335. <i>r</i> is the annual interest rate,<p><p>
  2336. </pre></font>
  2337.  
  2338. </page>
  2339. <page>
  2340. <font size=2><br></font><font size=11><pre>
  2341. <i>n</i> is the number of years, and<p>
  2342. <i>a</i> is the amount on deposit at the end of the <i>n</i>th year.<p>
  2343. </pre></font>
  2344. This problem involves a loop that performs the 
  2345. indicated calculation for each of the 10 years the money 
  2346. remains on deposit. The solution is shown in  <a href="^Code::c:s0p7"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.21</a>. <br>
  2347. <spacer width=16 height=1>The <b>for</b> structure executes the body of the loop 10 
  2348. times, varying a control variable from 1 to 10 in 
  2349. increments of 1. C++ does not include an 
  2350. exponentiation operator, so we use the standard library 
  2351. function <b>pow</b> for this purpose. The function <b>pow( x, y )</b> 
  2352. calculates the value of <b>x</b> raised to the <b>y</b>th power. 
  2353. Function <b>pow</b> takes two arguments of type <b>double</b> and <br>
  2354.  
  2355. </page>
  2356. <page>
  2357. returns a <b>double</b> value. The type <b>double</b> is a floating-
  2358. point type much like <b>float</b>, but a variable of type 
  2359. <b>double</b> can store a value of much greater magnitude 
  2360. with greater precision than <b>float</b>. Constants (like <b>1000.0</b> 
  2361. and <b>.05</b> in  <a href="^Code::c:s0p7"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.21</a>) are treated as being type <b>double</b> 
  2362. by C++.<br>
  2363. This program would not compile without the inclusion 
  2364. of<b> math.h</b>. Function <b>pow</b> requires two <b>double</b> 
  2365. arguments. Note that <b>year</b> is an integer. <a href="^Errors::c:s0p22"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>The <b>math.h</b> file 
  2366. includes information that tells the compiler to convert 
  2367. the value of <b>year</b> to a temporary <b>double</b> representation 
  2368. before calling the function. This information is 
  2369. contained in <b>pow</b>'s <i>function prototype</i>. Function <br>
  2370.  
  2371. </page>
  2372. <page>
  2373. prototypes are explained in Chapter 3. We provide a 
  2374. summary of the <b>pow</b> function and other math library 
  2375. functions in Chapter 3. <br>
  2376. <spacer width=16 height=1>Notice that we declared the variables <b>amount</b>, 
  2377. <b>principal</b>, and <b>rate</b> to be of type <b>double</b>. We have done 
  2378. this for simplicity because we are dealing with 
  2379. fractional parts of dollars and we need a type that 
  2380. allows decimal points in its values. Unfortunately, this 
  2381. can cause trouble. Here is a simple explanation of what 
  2382. can go wrong when using <b>float</b> or <b>double</b> to represent 
  2383. dollar amounts (assuming printing is done with 
  2384. <b>setprecision(2)</b>): Two <b>float</b> dollar amounts stored in the 
  2385. machine could be 14.234 (which prints as 14.23) and <br>
  2386.  
  2387. </page>
  2388. <page>
  2389. 18.673 (which prints as 18.67). When these amounts 
  2390. are added, they produce the internal sum 32.907 which 
  2391. prints as 32.91. Thus your printout could appear as<br>
  2392. <font size=2><br></font><font size=11><pre>
  2393.   14.23<p>
  2394. + 18.67<p>
  2395. -------<p>
  2396.   32.91<p>
  2397. </pre></font>
  2398. but a person adding the individual numbers as printed 
  2399. would expect the sum 32.90! <a href="^Practice::c:s0p29"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>You have been warned!<br>
  2400. <spacer width=16 height=1>The output statement <br>
  2401. <font size=2><br></font><font size=11><pre>
  2402. cout << setw( 4 ) << year<p>
  2403.      << setiosflags( ios::fixed | ios::showpoint )<p>
  2404.      << setw( 21 ) << setprecision( 2 ) <p>
  2405.      << amount << endl;<p>
  2406. </pre></font>
  2407.  
  2408. </page>
  2409. <page>
  2410. prints the values of the variables <b>year</b> and <b>amount</b> with 
  2411. the formatting specified by the parameterized stream 
  2412. manipulators <b>setw</b>, <b>setiosflags</b> and <b>setprecision</b>. The 
  2413. call <b>setw(4)</b> specifies that the next value output is 
  2414. printed in a<i> field width</i> of 4, i.e., the value is printed 
  2415. with at least 4 character positions. If the value to be 
  2416. output is less than 4 character positions wide, the value 
  2417. is <i>right justified</i> in the field by default. If the value to be 
  2418. output is more than 4 character positions wide, the field 
  2419. width is extended to accommodate the entire value. The 
  2420. call <b>setiosflags(ios::left)</b> can be used to specify that 
  2421. values should be output <i>left justified</i>.<br>
  2422.  
  2423. </page>
  2424. <page>
  2425. The remainder of the formatting in the preceding output 
  2426. statement indicates that variable <b>amount</b> is printed as a 
  2427. fixed-point value with a decimal point (specified with 
  2428. <b>setiosflags( ios::fixed | ios::showpoint )</b>) right-
  2429. justified in a field of 21 character positions (specified 
  2430. with <b>setw( 21 )</b>) and two digits of precision to the right 
  2431. of the decimal point (specified with <b>setprecision( 2 )</b>). 
  2432. We will discuss the powerful input/output formatting 
  2433. capabilities of C++ in detail in Chapter 11.<br>
  2434. <spacer width=16 height=1>Note that the calculation <b>1.0 + rate</b> which appears as an 
  2435. argument to the <b>pow</b> function is contained in the body 
  2436. of the <b>for</b> statement. <a href="^Perform::c:s0p8"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>In fact, this calculation produces <br>
  2437.  
  2438. </page>
  2439. <page>
  2440. the same result each time through the loop, so <a href="^Perform::c:s0p7"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>repeating 
  2441. the calculation is wasteful. <br>
  2442. <spacer width=16 height=1>For fun, be sure to try our Peter Minuet problem in the 
  2443. chapter exercises. This problem demonstrates the 
  2444. wonders of compound interest.<br>
  2445.  
  2446. </page>
  2447. <page>
  2448. <b>Select the true statement(s). </b><br>
  2449. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The language does not include an exponentiation operator.">
  2450. The C++ language includes an exponentiation operator. <br>
  2451. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2452. The pow method is from the math library.  <br>
  2453. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. A double can store a larger number with a much greater precision than a float.">
  2454. A float can store a number with a much greater precision and magnitude than a double.   <br>
  2455. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. Floating point numbers are approximated on most systems.">
  2456. Floating point numbers are represented exactly on most systems. <br>
  2457. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2458.  
  2459. </page>
  2460. </section>
  2461. <section type=Body name=Default title="2.16 The switch Multiple-Selection Structure">
  2462. <page>
  2463. <font size=18 bold>2.16 The <b>switch</b> Multiple-Selection Structure</font><hr>
  2464. We have discussed the <b>if</b> single-selection structure and 
  2465. the <b>if/else</b> double-selection structure. Occasionally, an 
  2466. algorithm will contain a series of decisions in which a 
  2467. variable or expression is tested separately for each of 
  2468. the constant integral values it may assume, and 
  2469. different actions are taken. C++ provides the <b>switch</b> 
  2470. multiple-selection structure to handle such decision 
  2471. making. <br>
  2472. <spacer width=16 height=1>The <b>switch</b> structure consists of a series of <b>case</b> labels, 
  2473. and an optional <b>default</b> case. The program in  <a href="^Code::c:s0p8"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a> <br>
  2474.  
  2475. </page>
  2476. <page>
  2477. uses <b>switch</b> to count the number of each different letter 
  2478. grade that students earned on an exam. <spacer width=20 height=1><br>
  2479. In the program, the user enters letter grades for a class. 
  2480. Inside the <b>while</b> header,<br>
  2481. <font size=2><br></font><font size=11><pre>
  2482. while ( ( grade = cin.get() ) != EOF)<p>
  2483. </pre></font>
  2484. the parenthesized assignment <b>( grade = cin.get() )</b> is 
  2485. executed first. The <b>cin.get()</b> function reads one 
  2486. character from the keyboard and stores that character in 
  2487. integer variable <b>grade</b>. The dot notation used in 
  2488. <b>cin.get()</b> will be explained in Chapter 6, "Classes." 
  2489. Characters are normally stored in variables of type 
  2490. <b>char</b>. However, an important feature of C++ is that <br>
  2491.  
  2492. </page>
  2493. <page>
  2494. characters can be stored in any integer data type 
  2495. because they are represented as 1-byte integers in the 
  2496. computer. Thus, we can treat a character as either an 
  2497. integer or a character depending on its use. For 
  2498. example, the statement<br>
  2499. <font size=2><br></font><font size=11><pre>
  2500. cout << "The character (" << 'a' << ") has the value " <p>
  2501.      << static_cast< int > ( 'a' ) << endl;<p>
  2502. </pre></font>
  2503. prints the character <b>a</b> and its integer value as follows<br>
  2504. <font size=2><br></font><font size=11><pre>
  2505. The character (a) has the value 97<p>
  2506. </pre></font>
  2507. The integer 97 is the character's numerical 
  2508. representation in the computer. Many computers today 
  2509. use the<i> ASCII (American Standard Code for 
  2510. </i><br>
  2511.  
  2512. </page>
  2513. <page>
  2514. <i>Information Interchange) character set</i> in which 97 
  2515. represents the lowercase letter <b>'a'</b>. A list of the ASCII 
  2516. characters and their decimal values is presented in the 
  2517. appendices. <br>
  2518. <spacer width=16 height=1>Assignment statements as a whole have the value that is 
  2519. assigned to the variable on the left side of the <b>=</b>. Thus, 
  2520. the value of the assignment <b>grade = cin.get()</b> is the 
  2521. same as the value returned by <b>cin.get()</b> and assigned to 
  2522. the variable <b>grade</b>. <br>
  2523. <spacer width=16 height=1>The fact that assignment statements have values can be 
  2524. useful for initializing several variables to the same 
  2525. value. For example, <br>
  2526. <font size=2><br></font><font size=11><pre>
  2527. a = b = c = 0;<p>
  2528. </pre></font>
  2529.  
  2530. </page>
  2531. <page>
  2532. first evaluates the assignment <b>c = 0</b> (because the <b>=</b> 
  2533. operator associates from right to left). The variable <b>b</b> is 
  2534. then assigned the value of the assignment <b>c = 0</b> (which 
  2535. is 0). Then, the variable <b>a</b> is assigned the value of the 
  2536. assignment <b>b = (c = 0)</b> (which is also 0). In the 
  2537. program, the value of the assignment <b>grade = cin.get()</b> 
  2538. is compared with the value of <b>EOF</b> (a symbol whose 
  2539. acronym stands for "end-of-file"). We use <b>EOF</b> (which 
  2540. normally has the value 1) as the sentinel value. The 
  2541. user types a system-dependent keystroke combination 
  2542. to mean "end-of-file," i.e., "I have no more data to 
  2543. enter." <b>EOF</b> is a symbolic integer constant defined in 
  2544. the <b><iostream.h></b> header file. If the value assigned to <br>
  2545.  
  2546. </page>
  2547. <page>
  2548. <b>grade</b> is equal <b><a href="^Portable::c:s0p5"><img src="bckgrnds/icons/port_ico.gif" align=sidebar></a></b>to <b>EOF</b>, the program terminates. We 
  2549. have chosen to represent characters in this program as 
  2550. <b>int</b>s <b><a href="^Portable::c:s0p3"><img src="bckgrnds/icons/port_ico.gif" align=sidebar></a></b>because <b>EOF</b> has an integer value (again, normally 
  2551. 1). <br>
  2552. <spacer width=16 height=1>On UNIX systems and many others, end-of-file is 
  2553. entered by typing the sequence<br>
  2554. <font size=2><br></font><font size=11><pre>
  2555. <<i>ctrl-d</i>><p>
  2556. </pre></font>
  2557. on a line by itself. This notation means to 
  2558. simultaneously press both the <b>ctrl</b> key and the <b>d</b> key. 
  2559. On other systems such as Digital Equipment 
  2560. Corporation's VAX VMS or Microsoft Corporation's 
  2561. MS-DOS, end-of-file can be entered by typing <br>
  2562. <font size=2><br></font><font size=11><pre>
  2563. <<i>ctrl-z</i>><p>
  2564. </pre></font>
  2565.  
  2566. </page>
  2567. <page>
  2568. The user enters grades at the keyboard. When the <i>Enter</i> 
  2569. (or <i>Return</i>) key is pressed, the characters are read by the 
  2570. <b>cin.get()</b> function one character at a time. If the 
  2571. character entered is not end-of-file, the <b>switch</b> structure 
  2572. is entered. The keyword <b>switch</b> is followed by the 
  2573. variable name <b>grade</b> in parentheses. This is called the 
  2574. <i>controlling expression</i>. The value of this expression is 
  2575. compared with each of the <b>case</b> <i>labels</i>. Assume the user 
  2576. has entered the letter <b>C</b> as a grade. <b>C</b> is automatically 
  2577. compared to each <b>case</b> in the <b>switch</b>. If a match occurs 
  2578. (<b>case 'C':</b>), the statements for that <b>case</b> are executed. 
  2579. For the letter <b>C</b>, <b>cCount</b> is incremented by <b>1</b>, and the 
  2580. <b>switch</b> structure is exited immediately with the <b>break</b> <br>
  2581.  
  2582. </page>
  2583. <page>
  2584. statement. Note that unlike other control structures, it is 
  2585. not necessary to enclose a multistatement <b>case</b> in 
  2586. braces.<br>
  2587. <spacer width=16 height=1>The <b>break</b> statement causes program control to proceed 
  2588. with the first statement after the <b>switch</b> structure. The 
  2589. <b>break</b> statement is used because the <b>case</b>s in a <b>switch</b> 
  2590. statement would otherwise run together. If <b>break</b> is not 
  2591. used anywhere in a <b>switch</b> structure, then each time a 
  2592. match occurs in the structure, the statements for all the 
  2593. remaining <b>case</b>s will be executed. (This feature is 
  2594. sometimes useful when performing the same actions for 
  2595. several <b>case</b>s, as in the program of<a href="^Code::c:s0p8">  <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a>.) If no <br>
  2596.  
  2597. </page>
  2598. <page>
  2599. match occurs, the <b>default</b> case is executed and an error 
  2600. message is printed. <br>
  2601. <spacer width=16 height=1>Each <b>case</b> can have one or more actions. The <b>switch</b> 
  2602. structure is different from all other structures in that 
  2603. braces are not required around multiple actions in a 
  2604. <b>case</b> of a <b>switch</b>. The general <b>switch</b> multiple-selection 
  2605. structure (using a <b>break</b> in each <b>case</b>) is flowcharted in  
  2606. <a href="^Illustration::c:s0p16"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.23</a>. <br>
  2607. <spacer width=16 height=1><a href="^Errors::c:s0p25"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>The flowchart makes it clear that each <b>break</b> statement 
  2608. at the end of a <b>case</b>  <b><a href="^Errors::c:s0p23"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a></b>causes control to immediately exit 
  2609. the <b>switch</b> structure. Again, note that (besides small 
  2610. circles and arrows) the flowchart contains only 
  2611. rectangle symbols and diamond symbols. Imagine, <br>
  2612.  
  2613. </page>
  2614. <page>
  2615. again, that the programmer has access to a deep bin of 
  2616. empty <b>switch</b> structures--as many as the programmer 
  2617. might need to stack and nest with other control 
  2618. structures to form a structured implementation of an 
  2619. <a href="^Practice::c:s0p33"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>algorithm's flow of control. And again, the rectangles 
  2620. and diamonds are then filled with actions and decisions  
  2621. <a href="^Practice::c:s0p32"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>appropriate to the algorithm. Nested control structures 
  2622. are common, but it is rare to find <b><a href="^Practice::c:s0p31"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a></b>nested <b>switch</b> 
  2623. structures in a program.<br>
  2624. <spacer width=16 height=1>In the <b>switch</b> structure of <a href="^Code::c:s0p8"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a>, lines 46-49<br>
  2625. <font size=2><br></font><font size=11><pre>
  2626. case '\n': <p>
  2627. case '\ ': <p>
  2628. case ' ':<p>
  2629.    break;<p>
  2630. </pre></font>
  2631.  
  2632. </page>
  2633. <page>
  2634. cause the program to skip newline, tab and blank 
  2635. characters. Reading characters one at a time can cause 
  2636. some problems. To have the program read the 
  2637. characters, they must be sent to the computer by 
  2638. pressing the <i>Enter key </i>on the keyboard. This places a 
  2639. newline character  in the input after the character we 
  2640. wish to process. Often, this newline character must be 
  2641. specially processed to make the program work 
  2642. correctly. By including the preceding cases in our 
  2643. <b>switch</b> structure, we prevent the error message in the 
  2644. <b>default</b> case from being printed each time a <a href="^Errors::c:s0p26"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>newline, 
  2645. tab or space is encountered in the input.<br>
  2646.  
  2647. </page>
  2648. <page>
  2649. Note that several case labels listed together (such as 
  2650. <b>case 'D': case 'd':</b> in  <a href="^Code::c:s0p8"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a>) simply means that the 
  2651. same set of actions is to occur for each of the cases.<br>
  2652. <spacer width=16 height=1>When using the <b>switch</b> structure, remember that it can 
  2653. only be used for testing a <i>constant integral expression</i>, 
  2654. i.e., any combination of character constants and integer 
  2655. constants that evaluates to a constant integer value. A 
  2656. character constant is represented as the specific 
  2657. character in single quotes such as <b>'A'</b>. An integer 
  2658. constant is simply an integer value. <br>
  2659. <spacer width=16 height=1>When we get to the part of the book on object-oriented 
  2660. programming, we will present a more elegant way to 
  2661. implement <b>switch</b> logic. We will use a technique called <br>
  2662.  
  2663. </page>
  2664. <page>
  2665. polymorphism to create programs that are often clearer, 
  2666. more concise, easier to maintain, and easier to extend 
  2667. than programs using <b>switch</b> logic.<br>
  2668. <spacer width=16 height=1>Portable languages like C++ must have flexible data 
  2669. type sizes. Different applications may need integers of 
  2670. different sizes. C++ provides several data types to 
  2671. represent integers. The range of integer values for each 
  2672. type depends on the particular computer's hardware. In 
  2673. addition to the types <b>int</b> and <b>char</b>, C++ provides the 
  2674. types <b>short</b> (an abbreviation of <b>short int</b>) and <b>long</b> (an 
  2675. abbreviation of <b>long int</b>). The minimum range of values 
  2676. for <b>short</b> integers is +/-<a href="^Portable::c:s0p6"><img src="bckgrnds/icons/port_ico.gif" align=sidebar></a>32767. For the vast majority of 
  2677. integer calculations, <b>long</b> integers are sufficient. The <br>
  2678.  
  2679. </page>
  2680. <page>
  2681. minimum range of values for <b>long</b> integers is +/-
  2682. 2147483647. <a href="^Perform::c:s0p11"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>On most computers, <b>int</b>s are equivalent 
  2683. either to <b>short</b> or to <b>long</b>. The range of values for an <b>int</b> 
  2684. is <a href="^Perform::c:s0p10"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>at least the same as the range for <b>short</b> integers and 
  2685. no larger than the range for <b>long</b> integers. The data type 
  2686. <b>char</b> can be used to represent any of the characters in 
  2687. the computer's character set. <a href="^Errors::c:s0p27"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>The data type <b>char</b> can 
  2688. also be used to represent small integers.<br>
  2689.  
  2690. </page>
  2691. <page>
  2692. <b>Select the true statement(s). </b><br>
  2693. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. Only constant integral expressions can be used with the switch structure.">
  2694. The switch structure can be used with any data type.   <br>
  2695. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The break statement is optional.">
  2696. The break statement is required in a switch structure. <br>
  2697. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2698. The break statement causes program control to proceed with the first statement after the switch structure.  <br>
  2699. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2700. The default case is optional.  <br>
  2701. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2702.  
  2703. </page>
  2704. </section>
  2705. <section type=Body name=Default title="2.17 The do/while Repetition Structure">
  2706. <page>
  2707. <font size=18 bold>2.17 The <b>do/while</b> Repetition Structure</font><hr>
  2708. The <b>do/while</b> repetition structure is similar to the <b>while</b> 
  2709. structure. In the <b>while</b> structure, the loop-continuation 
  2710. condition is tested at the beginning of the loop before 
  2711. the body of the loop is performed. The <b>do/while</b> 
  2712. structure tests the loop-continuation condition <i>after</i> the 
  2713. loop body is performed; therefore, the loop body will be 
  2714. executed at least once. When a <b>do/while</b> terminates, 
  2715. execution continues with the statement after the <b>while</b> 
  2716. clause. Note that it is not necessary to use braces in the 
  2717. <b>do/while</b> structure if there is only one statement in the 
  2718. body. However, the braces are usually included to avoid <br>
  2719.  
  2720. </page>
  2721. <page>
  2722. confusion between the <b>while</b> and <b>do/while</b> structures. 
  2723. For example, <br>
  2724. <font size=2><br></font><font size=11><pre>
  2725. while ( <i>condition</i> )<p>
  2726. </pre></font>
  2727. is normally regarded as the header to a <b>while</b> structure. 
  2728. A <b>do/while</b> with no braces around the single statement 
  2729. body appears as <br>
  2730. <font size=2><br></font><font size=11><pre>
  2731. do <p>
  2732.    <i>statement<p>
  2733. </i>while ( <i>condition</i> );<p>
  2734. </pre></font>
  2735. which can be confusing. The last line--<b>while</b>( 
  2736. <i>condition</i> );--may be misinterpreted by the reader as a 
  2737. <b>while</b> structure containing an empty statement. Thus, <br>
  2738.  
  2739. </page>
  2740. <page>
  2741. the <b>do/while</b> with one statement is often written as 
  2742. <a href="^Errors::c:s0p28"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>follows to avoid confusion:<br>
  2743. <font size=2><br></font><font size=11><pre>
  2744. do {<p>
  2745.    <i>statement<p>
  2746. </i>} while ( condition );<p>
  2747. </pre></font>
  2748. <a href="^Practice::c:s0p35"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a>The program in <a href="^Code::c:s0p9"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.24</a> uses a <b>do/while</b> repetition 
  2749. structure to print the numbers from 1 to 10. Note that 
  2750. the control variable <b>counter</b> is preincremented in the 
  2751. loop-continuation test. Note also the use of the braces to 
  2752. enclose the single-statement body of the <b>do/while</b> 
  2753. structure.<br>
  2754. The <b>do/while</b> structure is flowcharted in  <a href="^Illustration::c:s0p17"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.25</a>. This 
  2755. flowchart makes it clear that the loop-continuation <br>
  2756.  
  2757. </page>
  2758. <page>
  2759. condition is not executed until after the action is 
  2760. performed at least once. Again, note that (besides small 
  2761. circles and arrows) the flowchart contains only a 
  2762. rectangle symbol and a diamond symbol. Imagine, 
  2763. again, that the programmer has access to a deep bin of 
  2764. empty <b>do/while</b> structures--as many as the 
  2765. programmer might need to stack and nest with other 
  2766. control structures to form a structured implementation 
  2767. of an algorithm's flow of control. And again, the 
  2768. rectangles and diamonds are then filled with actions and 
  2769. decisions appropriate to the algorithm.<br>
  2770.  
  2771. </page>
  2772. <page>
  2773. <b>Select the true statement(s). </b><br>
  2774. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The body is executed at least once.">
  2775. The body of a do/while is executed only if the loop-continuation condition is true. <br>
  2776. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2777. The do/while structure ends in a semicolon.  <br>
  2778. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2779.  
  2780. </page>
  2781. </section>
  2782. <section type=Body name=Default title="2.18 The break and continue Statements">
  2783. <page>
  2784. <font size=18 bold>2.18 The <b>break</b> and <b>continue</b> Statements</font><hr>
  2785. The <b>break</b> and <b>continue</b> statements alter the flow of 
  2786. control. The <b>break</b> statement, when executed in a 
  2787. <b>while</b>, <b>for</b>, <b>do/while</b>, or <b>switch</b> structure, causes 
  2788. immediate exit from that structure. Program execution 
  2789. continues with the first statement after the structure. 
  2790. Common uses of the <b>break</b> statement are to escape 
  2791. early from a loop, or to skip the remainder of a <b>switch</b> 
  2792. structure (as in <a href="^Code::c:s0p8"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a>).  <a href="^Code::c:s0p10"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Figure 2.26</a> demonstrates 
  2793. the <b>break</b> statement in a <b>for</b> repetition structure. When 
  2794. the <b>if</b> structure detects that <b>x</b> has become <b>5</b>, <b>break</b> is 
  2795. executed. This terminates the <b>for</b> statement and the <br>
  2796.  
  2797. </page>
  2798. <page>
  2799. program continues with the <b>cout</b> after the <b>for</b>. The loop 
  2800. fully executes only four times.<br>
  2801. <spacer width=16 height=1>Note that the control variable <b>x</b> in this program is 
  2802. defined outside the <b>for</b> structure header. This is because 
  2803. we intend to use the control variable both in the body of 
  2804. the loop and after the loop completes its execution.<br>
  2805. <spacer width=16 height=1>The <b>continue</b> statement, when executed in a <b>while</b>, <b>for</b>, 
  2806. or <b>do/while</b> structure, skips the remaining statements in 
  2807. the body of that structure, and proceeds with the next 
  2808. iteration of the loop. In <b>while</b> and <b>do/while</b> structures, 
  2809. the loop-continuation test is evaluated immediately 
  2810. after the <b>continue</b> statement is executed. In the <b>for</b> 
  2811. structure, the increment expression is executed, then the <br>
  2812.  
  2813. </page>
  2814. <page>
  2815. loop-continuation test is evaluated. Earlier, we stated 
  2816. that the <b>while</b> structure could be used in most cases to 
  2817. represent the <b>for</b> structure. The one exception occurs 
  2818. when the increment expression in the <b>while</b> structure 
  2819. follows the <b>continue</b> <b><a href="^Practice::c:s0p37"><img src="bckgrnds/icons/gpp_ico.gif" align=sidebar></a></b>statement. In this case, the 
  2820. increment is not executed before the repetition-
  2821. continuation condition is tested, and the <b>while</b> does not 
  2822. execute in the same manner as the <b>for</b>. <a href="^Code::c:s0p11"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Figure 2.27</a> uses 
  2823. the  <b>continue</b> <b><a href="^Perform::c:s0p12"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a></b>statement in a <b>for</b> structure to skip the 
  2824. output statement in the structure and begin the next 
  2825. iteration of <a href="^Engineer::c:s0p16"><img src="bckgrnds/icons/seo_ico.gif" align=sidebar></a>the loop.<br>
  2826.  
  2827. </page>
  2828. <page>
  2829. <b>Select the true statement(s). </b><br>
  2830. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  2831. The continue statement skips the remaining iteration of a loop.  <br>
  2832. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. The break statement can also be used to exit a switch structure.">
  2833. The break statement can only be used to exit a repetition structure. <br>
  2834. <component type=button name=b label="Check Your Answer" width=125 height=24>
  2835.  
  2836. </page>
  2837. </section>
  2838. <section type=Body name=Default title="2.19 Logical Operators">
  2839. <page>
  2840. <font size=18 bold>2.19 Logical Operators</font><hr>
  2841. So far we have studied only<i> simple conditions</i> such as 
  2842. <b>counter <= 10, total > 1000</b>, and <b>number != 
  2843. sentinelValue</b>. We have expressed these conditions in 
  2844. terms of the relational operators <b>></b>,<b> <</b>, <b>>=</b>, and <b><=</b>, and 
  2845. the equality operators <b>==</b> and <b>!=</b>. Each decision tested 
  2846. precisely one condition. To test multiple conditions 
  2847. while making a decision, we performed these tests in 
  2848. separate statements or in nested <b>if</b> or <b>if/else</b> structures.<br>
  2849. <spacer width=16 height=1>C++ provides <i>logical operators</i> that are used to form 
  2850. more complex conditions by combining simple 
  2851. conditions. The logical operators are<b> &&</b> (<i>logical</i> <br>
  2852.  
  2853. </page>
  2854. <page>
  2855. <i>AND</i>), <b>||</b> (<i>logical OR</i>), and <b>!</b> (<i>logical NOT</i> also called 
  2856. <i>logical negation</i>). We consider examples of each of 
  2857. these.<br>
  2858. <spacer width=16 height=1>Suppose we wish to ensure that two conditions are <i>both</i> 
  2859. <b>true</b> before we choose a certain path of execution. In 
  2860. this case we can use the logical <b>&& </b>operator as 
  2861. follows:<br>
  2862. <font size=2><br></font><font size=11><pre>
  2863. if ( gender == 1 && age >= 65 )<p>
  2864.    ++seniorFemales;<p>
  2865. </pre></font>
  2866. This <b>if</b> statement contains two simple conditions. The 
  2867. condition <b>gender == 1</b> might be evaluated, for 
  2868. example, to determine if a person is a female. The 
  2869. condition <b>age >= 65</b> is evaluated to determine if a <br>
  2870.  
  2871. </page>
  2872. <page>
  2873. person is a senior citizen. The simple condition to the 
  2874. left of the <b>&&</b> operator is evaluated first because the 
  2875. precedence of <b>==</b> is higher than the precedence of <b>&&</b>. 
  2876. If necessary, the simple condition to the right of the <b>&&</b> 
  2877. operator is evaluated next because the precedence of <b>>=</b> 
  2878. is higher than the precedence of <b>&&</b> (as we will discuss 
  2879. shortly, the right side of a logical AND expression is 
  2880. only evaluated if the left side is <b>true</b>). The <b>if</b> statement 
  2881. then considers the combined condition<br>
  2882. <font size=2><br></font><font size=11><pre>
  2883. gender == 1 && age >= 65<p>
  2884. </pre></font>
  2885. This condition is <b>true</b> if and only if both of the simple 
  2886. conditions are <b>true</b>. Finally, if this combined condition 
  2887. is indeed <b>true</b>, then the count of <b>seniorFemales</b> is <br>
  2888.  
  2889. </page>
  2890. <page>
  2891. incremented by <b>1</b>. If either or both of the simple 
  2892. conditions are <b>false</b>, then the program skips the 
  2893. incrementing and proceeds to the statement following 
  2894. the <b>if</b>. <a href="^Errors::c:s0p30"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>The preceding combined condition can be made 
  2895. more readable by adding redundant parentheses<br>
  2896. <font size=2><br></font><font size=11><pre>
  2897. ( gender == 1 ) && ( age >= 65 )<p>
  2898. </pre></font>
  2899. The table of  <a href="^Illustration::c:s0p18"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.28</a> summarizes the <b>&&</b> operator. 
  2900. The table shows all four possible combinations of <b>false</b> 
  2901. and <b>true</b> values for expression1 and expression2. Such 
  2902. tables are often called <i>truth tables</i>. C++ evaluates to 
  2903. <b>false</b> or <b>true</b> all <b><a href="^Portable::c:s0p7"><img src="bckgrnds/icons/port_ico.gif" align=sidebar></a></b>expressions that include relational 
  2904. operators, equality operators, and/or logical operators. <br>
  2905.  
  2906. </page>
  2907. <page>
  2908. Now let us consider the <b>||</b> (logical OR) operator. 
  2909. Suppose we wish to ensure at some point in a program 
  2910. that either <i>or</i> both of two conditions are <b>true</b> before we 
  2911. choose a certain path of execution. In this case we use 
  2912. the || operator as in the following program segment:<br>
  2913. <font size=2><br></font><font size=11><pre>
  2914. if ( semesterAverage >= 90 || finalExam >= 90 )<p>
  2915.    cout << "Student grade is A" << endl;<p>
  2916. </pre></font>
  2917. This preceding condition also contains two simple 
  2918. conditions. The simple condition <b>semesterAverage >= 
  2919. 90</b> is evaluated to determine if the student deserves an 
  2920. "A" in the course because of a solid performance 
  2921. throughout the semester. The simple condition 
  2922. <b>finalExam >= 90</b> is evaluated to determine if the <br>
  2923.  
  2924. </page>
  2925. <page>
  2926. student deserves an "A" in the course because of an 
  2927. outstanding performance on the final exam. The <b>if</b> 
  2928. statement then considers the combined condition<br>
  2929. <font size=2><br></font><font size=11><pre>
  2930. semesterAverage >= 90 || finalExam >= 90<p>
  2931. </pre></font>
  2932. and awards the student an "A" if either or both of the 
  2933. simple conditions are <b>true</b>. Note that the message 
  2934. "<b>Student grade is A</b>" is not printed only when both of 
  2935. the simple conditions are <b>false</b>.  <a href="^Illustration::c:s0p19"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.29</a> is a truth 
  2936. table for the logical OR operator (<b>||</b>).<br>
  2937. <spacer width=16 height=1>The <b>&&</b> operator has a higher precedence than the<b> ||</b> 
  2938. operator. Both operators associate from left to right. An 
  2939. expression containing  <b>&&</b> or <b>||</b> <a href="^Perform::c:s0p13"><img src="bckgrnds/icons/perf_ico.gif" align=sidebar></a>operators is evaluated <br>
  2940.  
  2941. </page>
  2942. <page>
  2943. only until truth or falsehood is known. Thus, evaluation 
  2944. of the expression <br>
  2945. <font size=2><br></font><font size=11><pre>
  2946. gender == 1 && age >= 65<p>
  2947. </pre></font>
  2948. will <a href="^Errors::c:s0p31"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>stop immediately if <b>gender</b> is not equal to <b>1</b> (i.e., 
  2949. the entire expression is <b>false</b>), and continue if <b>gender</b> is 
  2950. equal to <b>1</b> (i.e., the entire expression could still be <b>true</b> 
  2951. if the condition <b>age >= 65 is true</b>).<br>
  2952. C++ provides the <b>!</b> (logical negation) operator to enable 
  2953. a programmer to "reverse" the meaning of a condition. 
  2954. Unlike the <b>&&</b> and <b>||</b> operators, which combine two 
  2955. conditions (binary operators), the logical negation 
  2956. operator has only a single condition as an operand  
  2957. (unary operator). The logical negation operator is <br>
  2958.  
  2959. </page>
  2960. <page>
  2961. placed before a condition when we are interested in 
  2962. choosing a path of execution if the original condition 
  2963. (without the logical negation operator) is <b>false</b>, such as 
  2964. in the following program segment:<br>
  2965. <font size=2><br></font><font size=11><pre>
  2966. if ( !( grade == sentinelValue ) )<p>
  2967.    cout << "The next grade is " << grade << endl;<p>
  2968. </pre></font>
  2969. The parentheses around the condition <b>grade == 
  2970. sentinelValue</b> are needed because the logical negation 
  2971. operator has a higher precedence than the equality 
  2972. operator. <a href="^Illustration::c:s0p20"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.30</a> is a truth table for the logical 
  2973. negation operator.<br>
  2974. <spacer width=16 height=1>In most cases, the programmer can avoid using logical 
  2975. negation by expressing the condition differently with an <br>
  2976.  
  2977. </page>
  2978. <page>
  2979. appropriate relational or equality operator. For example, 
  2980. the preceding statement may also be written as follows:<br>
  2981. <font size=2><br></font><font size=11><pre>
  2982. if ( grade != sentinelValue )<p>
  2983.    cout << "The next grade is " << grade << endl;<p>
  2984. </pre></font>
  2985. This flexibility can often help a programmer express a 
  2986. condition in a more "natural" or convenient manner.<br>
  2987. <spacer width=16 height=1><a href="^Illustration::c:s0p21"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.31</a> shows the precedence and associativity of 
  2988. the C++ operators introduced to this point. The 
  2989. operators are shown from top to bottom in decreasing 
  2990. order of precedence. <br>
  2991.  
  2992. </page>
  2993. <page>
  2994. <b>Drag the correct term to the box associated with the 
  2995. attribute:</b><br>
  2996. <component type="drag" width=16 height=18 label="&&" name="&&">   <component type="drag" width=8 height=18 label="!" name="!">   <component type="drag" width=16 height=18 label="||" name="||">   <br>
  2997. Logical AND.<component type="drop" width=24 height=18 name="&&">  <br>
  2998. Logical Negation.<component type="drop" width=24 height=18 name="!">  <br>
  2999. Logical OR.<component type="drop" width=24 height=18 name="||">  <br>
  3000. <component type=button name=b label="Check Your Answer" width=125 height=24>
  3001.  
  3002. </page>
  3003. </section>
  3004. <section type=Body name=Default title="2.20 Confusing Equality (==) and Assignment (=) Operators">
  3005. <page>
  3006. <font size=18 bold>2.20 Confusing Equality (<tt>==</tt>) and Assignment 
  3007. (<tt>=</tt>) Operators</font><hr>
  3008. There is one type of error that C++ programmers, no 
  3009. matter how experienced, tend to make so frequently 
  3010. that we felt it was worth a separate section. That error is 
  3011. accidentally swapping the operators <b>==</b> (equality) and <b>=</b> 
  3012. (assignment). What makes these swaps so damaging is 
  3013. the fact that they do not ordinarily cause syntax errors. 
  3014. Rather, statements with these errors ordinarily compile 
  3015. correctly, and the programs run to completion probably 
  3016. generating incorrect results through run-time logic 
  3017. errors.<br>
  3018.  
  3019. </page>
  3020. <page>
  3021.  There are two aspects of C++ that cause these 
  3022. problems. One is that any expression that produces a 
  3023. value can be used in the decision portion of any control 
  3024. structure. If the value is 0, it is treated as <b>false</b>, and if 
  3025. the value is nonzero, it is treated as <b>true</b>. The second is 
  3026. that C++ assignments produce a value, namely the 
  3027. value that is assigned to the variable on the left side of 
  3028. the <a href="^Errors::c:s0p33"><img src="bckgrnds/icons/cpe_ico.gif" align=sidebar></a>assignment operator. For example, suppose we 
  3029. intend to write<br>
  3030. <font size=2><br></font><font size=11><pre>
  3031. if ( payCode == 4 )<p>
  3032.    cout << "You get a bonus!" << endl;<p>
  3033. </pre></font>
  3034. but we accidentally write<br>
  3035.  
  3036. </page>
  3037. <page>
  3038. <font size=2><br></font><font size=11><pre>
  3039. if ( payCode = 4 )<p>
  3040.    cout << "You get a bonus!" << endl;<p>
  3041. </pre></font>
  3042. The first <b>if</b> statement properly awards a bonus to the 
  3043. person whose <b>paycode</b> is equal to 4. The second <b>if</b> 
  3044. statement--the one with the error--evaluates the 
  3045. assignment expression in the <b>if</b> condition to the constant 
  3046. 4. Because any nonzero value is interpreted as <b>true</b>, the 
  3047. condition in this <b>if</b> statement is always <b>true</b>, and the 
  3048. person always receives a bonus regardless of what the 
  3049. actual paycode is! Even worse, the paycode has been 
  3050. modified when it was only  <a href="^Debug::c:s0p0"><img src="bckgrnds/icons/dbt_ico.gif" align=sidebar></a>supposed to be examined!<br>
  3051. <spacer width=16 height=1>Variable names are said to be <i>lvalues</i> (for "left values") 
  3052. because they can be used on the left side of an <br>
  3053.  
  3054. </page>
  3055. <page>
  3056. assignment operator. Constants are said to be <i>rvalues</i> 
  3057. (for "right values") because they can be used on only 
  3058. the right side of an assignment operator. Note that 
  3059. <i>lvalues</i> can also be used as <i>rvalues</i>, but not vice versa.<br>
  3060. <spacer width=16 height=1>The other side of the coin can be equally unpleasant. 
  3061. Suppose the programmer wants to assign a value to a 
  3062. variable with a simple statement like<br>
  3063. <font size=2><br></font><font size=11><pre>
  3064. x = 1;<p>
  3065. </pre></font>
  3066. but instead writes<br>
  3067. <font size=2><br></font><font size=11><pre>
  3068. x == 1;<p>
  3069. </pre></font>
  3070. Here, too, this is not a syntax error. Rather the compiler 
  3071. simply evaluates the conditional expression. If <b>x</b> is <br>
  3072.  
  3073. </page>
  3074. <page>
  3075. equal to <b>1</b>, the condition is <b>true</b> and the expression 
  3076. returns the value <b>true</b>. If <b>x</b> is not equal to <b>1</b>, the 
  3077. condition is <b>false</b> and the expression returns the value 
  3078. <b>false</b>. Regardless of what value is returned, there is no 
  3079. <a href="^Debug::c:s0p3"><img src="bckgrnds/icons/dbt_ico.gif" align=sidebar></a>assignment operator, so the value is simply lost, and the 
  3080. value of <b>x</b> remains unaltered, probably causing an 
  3081. execution-time logic error. Unfortunately, we do not 
  3082. have a handy trick available to help you with this 
  3083. problem!<br>
  3084.  
  3085. </page>
  3086. <page>
  3087. <b>Select the true statement(s). </b><br>
  3088. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  3089. The left side of an assignment expression is called an lvalue.  <br>
  3090. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  3091. Either = or == may be used in a C++ condition.  <br>
  3092. <component type=button name=b label="Check Your Answer" width=125 height=24>
  3093.  
  3094. </page>
  3095. </section>
  3096. <section type=Body name=Default title="2.21 Structured Programming Summary">
  3097. <page>
  3098. <font size=18 bold>2.21 Structured Programming Summary</font><hr>
  3099. Just as architects design buildings by employing the 
  3100. collective wisdom of their profession, so should 
  3101. programmers design programs. Our field is younger 
  3102. than architecture is, and our collective wisdom is 
  3103. considerably sparser. We have learned that structured 
  3104. programming produces programs that are easier than 
  3105. unstructured programs to understand and hence are 
  3106. easier to test, debug, modify, and even prove correct in 
  3107. a mathematical sense. <br>
  3108. <spacer width=16 height=1> <a href="^Illustration::c:s0p22"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.32</a> summarizes C++'s control structures. 
  3109. Small circles are used in the figure to indicate the single <br>
  3110.  
  3111. </page>
  3112. <page>
  3113. entry point and the single exit point of each structure. 
  3114. Connecting individual flowchart symbols arbitrarily 
  3115. can lead to unstructured programs. Therefore, the 
  3116. programming profession has chosen to combine 
  3117. flowchart symbols to form a limited set of control 
  3118. structures, and to build structured programs by properly 
  3119. combining control structures in two simple ways. <br>
  3120. For simplicity, only single-entry/single-exit control 
  3121. structures are used--there is only one way to enter and 
  3122. only one way to exit each control structure. Connecting 
  3123. control structures in sequence to form structured 
  3124. programs is simple--the exit point of one control 
  3125. structure is connected to the entry point of the next <br>
  3126.  
  3127. </page>
  3128. <page>
  3129. control structure, i.e., the control structures are simply 
  3130. placed one after another in a program; we have called 
  3131. this "control structure stacking." The rules for forming 
  3132. structured programs also allow for control structures to 
  3133. be nested.<br>
  3134. <spacer width=16 height=1><a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 2.33</a> shows the rules for forming properly 
  3135. structured programs. The rules assume that the 
  3136. rectangle flowchart symbol may be used to indicate any 
  3137. action including input/output. <br>
  3138. <spacer width=16 height=1>Applying the rules of <a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> always results in a 
  3139. structured flowchart with a neat, building-block 
  3140. appearance. For example, repeatedly applying rule 2 to 
  3141. the simplest flowchart results in a structured flowchart <br>
  3142.  
  3143. </page>
  3144. <page>
  3145. containing many rectangles in sequence ( <a href="^Illustration::c:s0p24"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.35</a>). 
  3146. Notice that rule 2 generates a stack of control 
  3147. structures; so let us call rule 2 the <i>stacking rule</i>.<br>
  3148. <spacer width=16 height=1>Rule 3 is called the <i>nesting rule</i>. Repeatedly applying 
  3149. rule 3 to the simplest flowchart results in a flowchart 
  3150. with neatly nested control structures. For example, in  
  3151. <a href="^Illustration::c:s0p29"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.36</a>, the rectangle in the simplest flowchart is first 
  3152. replaced with a double-selection (<b>if/else</b>) structure. 
  3153. Then rule 3 is applied again to both of the rectangles in 
  3154. the double-selection structure, replacing each of these 
  3155. rectangles with double-selection structures. The dashed 
  3156. boxes around each of the double-selection structures <br>
  3157.  
  3158. </page>
  3159. <page>
  3160. represent the rectangle that was replaced in the original 
  3161. simplest flowchart.<br>
  3162. <spacer width=16 height=1>Rule 4 generates larger, more involved, and more 
  3163. deeply nested structures. The flowcharts that emerge 
  3164. from applying the rules in <a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> constitute the set of 
  3165. all possible structured flowcharts and hence the set of 
  3166. all possible structured programs. <br>
  3167. <spacer width=16 height=1>The beauty of the structured approach is that we use 
  3168. only seven simple single-entry/single-exit pieces, and 
  3169. we assemble them in only two simple ways. <a href="^Illustration::c:s0p28"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Figure 
  3170. 2.37</a> shows the kinds of stacked building blocks that 
  3171. emerge from applying rule 2 and the kinds of nested 
  3172. building blocks that emerge from applying rule 3. The <br>
  3173.  
  3174. </page>
  3175. <page>
  3176. figure also shows the kind of overlapped building 
  3177. blocks that cannot appear in structured flowcharts 
  3178. (because of the elimination of the <b>goto</b> statement).  <br>
  3179. <spacer width=16 height=1>If the rules in  <a href="^Illustration::c:s0p26"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> are followed, an unstructured 
  3180. flowchart (such as that in  <a href="^Illustration::c:s0p27"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.38</a>) cannot be created. 
  3181. If you are uncertain if a particular flowchart is 
  3182. structured, apply the rules of  <a href="^Illustration::c:s0p26"><img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> in reverse to try 
  3183. to reduce the flowchart to the simplest flowchart. If the 
  3184. flowchart is reducible to the simplest flowchart, the 
  3185. original flowchart is structured; otherwise, it is not.<br>
  3186. <spacer width=16 height=1>Structured programming promotes simplicity. Bohm 
  3187. and Jacopini have given us the result that only three 
  3188. forms of control are needed:<br>
  3189.  
  3190. </page>
  3191. <page>
  3192. <indent width=8 delay>*   Sequence</indent>
  3193. <indent width=8 delay>*   Selection</indent>
  3194. <indent width=8 delay>*   Repetition</indent>
  3195. Sequence is trivial. Selection is implemented in one of 
  3196. three ways:<br>
  3197. <indent width=8 delay>*   <b>if</b> structure (single selection)</indent>
  3198. <indent width=8 delay>*   <b>if/else</b> structure (double selection)</indent>
  3199. <indent width=8 delay>*   <b>switch</b> structure (multiple selection)</indent>
  3200. In fact, it is straightforward to prove that the simple <b>if</b> 
  3201. structure is sufficient to provide any form of 
  3202. selection--everything that can be done with the <b>if/else</b> 
  3203. structure and the <b>switch</b> structure can be implemented <br>
  3204.  
  3205. </page>
  3206. <page>
  3207. by combining <b>if</b> structures (although perhaps not as 
  3208. smoothly).<br>
  3209. Repetition is implemented in one of three ways:<br>
  3210. <indent width=8 delay>*   <b>while</b> structure</indent>
  3211. <indent width=8 delay>*   <b>do/while</b> structure</indent>
  3212. <indent width=8 delay>*   <b>for</b> structure</indent>
  3213. It is straightforward to prove that the <b>while</b> structure is 
  3214. sufficient to provide any form of repetition. Everything 
  3215. that can be done with the <b>do/while </b>structure and the <b>for</b> 
  3216. structure can be done with the <b>while</b> structure (although 
  3217. perhaps not as smoothly).<br>
  3218.  
  3219. </page>
  3220. <page>
  3221. Combining these results illustrates that any form of 
  3222. control ever needed in a C++ program can be expressed 
  3223. in terms of:<br>
  3224. <indent width=8 delay>*   sequence</indent>
  3225. <indent width=8 delay>*   <b>if</b> structure (selection)</indent>
  3226. <indent width=8 delay>*   <b>while</b> structure (repetition)</indent>
  3227. And these control structures can be combined in only 
  3228. two ways--stacking and nesting. Indeed, structured 
  3229. programming promotes simplicity.<br>
  3230. <spacer width=16 height=1>In this chapter, we discussed how to compose programs 
  3231. from control structures containing actions and 
  3232. decisions. In Chapter 3, we introduce another program 
  3233. structuring unit called the <i>function</i>. We will learn to <br>
  3234.  
  3235. </page>
  3236. <page>
  3237. compose large programs by combining functions that, 
  3238. in turn, are composed of control structures. We will also 
  3239. discuss how functions promote software reusability. In 
  3240. Chapter 6, we introduce C++'s other program 
  3241. structuring unit called the <i>class</i>. We will then create 
  3242. objects from classes and proceed with our treatment of 
  3243. object-oriented programming. Now, we continue our 
  3244. introduction to objects by introducing a problem that 
  3245. the reader will attack with the techniques of object-
  3246. oriented design.  <br>
  3247.  
  3248. </page>
  3249. <page>
  3250. <b>Select the true statement(s). </b><br>
  3251. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  3252. C++ uses only single-entry/single-exit control structures.  <br>
  3253. <component type="checkbox" width=20 height=18 label="" name=""  feedback="False. C++ has 7 control structures.">
  3254. C++ has 10 control structures. <br>
  3255. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  3256. The three forms of control are sequence, selection, and repetition.  <br>
  3257. <component type="checkbox" width=20 height=18 label="" name=""  correct="True.">
  3258. Control structures can only be combined in two waysstacking and nesting. <br>
  3259. <component type=button name=b label="Check Your Answer" width=125 height=24>
  3260.  
  3261. </page>
  3262. </section>
  3263. <section type=Body name=Default title="2.22 Thinking About Objects: Identifying the Objects in a Problem">
  3264. <page>
  3265. <font size=18 bold>2.22 Thinking About Objects: Identifying the 
  3266. Objects in a Problem</font><hr>
  3267. Here you are, new at C++ and wondering what this 
  3268. marvelous new technology called object-orientation is 
  3269. all about. These special sections at the ends of the next 
  3270. several chapters will ease you into object-orientation by 
  3271. means of an interesting and challenging real-world case 
  3272. study on building an elevator simulator. <br>
  3273. <spacer width=16 height=1>In Chapters 2 through 5, you will perform the various 
  3274. steps of an object-oriented design (OOD). Beginning in 
  3275. Chapter 6, you will implement the elevator simulator 
  3276. using the techniques of object-oriented programming <br>
  3277.  
  3278. </page>
  3279. <page>
  3280. (OOP) in C++. For now, this assignment may seem a bit 
  3281. complex. Please do not be concerned. You will attempt 
  3282. only a small portion of the problem in this chapter.<br>
  3283. <font size=18>Problem Statement</font><br>
  3284. A company intends to build a two-story office building 
  3285. and equip it with the "latest" elevator technology. The 
  3286. company wants you to develop an object-oriented 
  3287. software simulator that models the operation of the 
  3288. elevator to determine if this elevator will meet their 
  3289. needs.<br>
  3290. <spacer width=16 height=1>The elevator, which has a capacity of one person, is 
  3291. designed to conserve energy, so it only moves when 
  3292. necessary. The elevator starts the day waiting with its <br>
  3293.  
  3294. </page>
  3295. <page>
  3296. door shut on floor 1 of the building. The elevator, of 
  3297. course, alternates directions--first up, then down. <br>
  3298. <spacer width=16 height=1>Your simulator includes a clock that begins the day set 
  3299. to time 0 and that "ticks" once per second. The 
  3300. "scheduler" component of the simulator randomly 
  3301. schedules the arrival of the first person on each floor 
  3302. (you will learn how to schedule random arrivals in 
  3303. Chapter 3). When the clock's time becomes equal to the 
  3304. time of the first arrival, the simulator "creates" a new 
  3305. person for the specified floor, and places the person on 
  3306. that floor. The person then presses the button on that 
  3307. floor to summon the elevator. The person's destination <br>
  3308.  
  3309. </page>
  3310. <page>
  3311. floor is never equal to the floor on which that person 
  3312. arrives. <br>
  3313. <spacer width=16 height=1>If the first person of the day arrives at floor 1, the 
  3314. person can immediately get on the elevator (after 
  3315. pressing the button and waiting for the elevator's door 
  3316. to open, of course!). If the first person arrives at floor 2, 
  3317. the elevator proceeds to floor 2 to pick up that person. 
  3318. The elevator requires five ticks of the clock to travel 
  3319. between floors.<br>
  3320. <spacer width=16 height=1>The elevator signals its arrival at a floor by turning on a 
  3321. light above the elevator door on that floor and by 
  3322. sounding a bell inside the elevator. The button on the 
  3323. floor and the button in the elevator for that floor are <br>
  3324.  
  3325. </page>
  3326. <page>
  3327. reset, the elevator opens its door, the passenger--if 
  3328. there is one whose destination is that floor--gets out of 
  3329. the elevator, another passenger--if there is one waiting 
  3330. on that floor--gets into the elevator and presses a 
  3331. destination button, and the elevator closes its door. If 
  3332. the elevator needs to begin moving, it determines in 
  3333. which direction it should go (a simple decision on a 
  3334. two-story elevator!), and begins moving to the next 
  3335. floor. For simplicity, assume that all of the events that 
  3336. happen once the elevator reaches a floor, and until the 
  3337. elevator closes its doors on that floor, take zero time. 
  3338. The elevator always knows what floor it is on and what 
  3339. floor it is going to. <br>
  3340.  
  3341. </page>
  3342. <page>
  3343. At most, one person can be waiting on each floor at any 
  3344. time, so if a floor is occupied when a new person (i.e., 
  3345. not a person already on the elevator) is due to arrive at 
  3346. that floor, the new arrival is rescheduled for one second 
  3347. later. Assume that people arrive at random on each floor 
  3348. every 5 to 20 seconds--in Chapter 3 you will learn how 
  3349. to use random number generation to simulate this 
  3350. arrival rate.<br>
  3351. <spacer width=16 height=1>Your goal (over these special sections in Chapters 2 
  3352. through 8) is to implement a working software 
  3353. simulator program that runs according to these 
  3354. specifications. Your program should simulate several 
  3355. minutes of the elevator's operation and determine if the <br>
  3356.  
  3357. </page>
  3358. <page>
  3359. elevator will successfully meet the anticipated traffic 
  3360. requirements in this office building.<br>
  3361.  
  3362. </page>
  3363. </section>
  3364. <section type=Body name=Default title="2.23 Elevator Laboratory Assignment 1">
  3365. <page>
  3366. <font size=18 bold>2.23 Elevator Laboratory Assignment 1</font><hr>
  3367. In this and the next few assignments, you will perform 
  3368. the separate steps of an object-oriented design. The first 
  3369. step is to <i>identify the objects</i> in your problem. You will 
  3370. eventually describe these objects in a formal way and 
  3371. implement them in C++. For this assignment, all you 
  3372. should do is<br>
  3373. <spacer width=16 height=1>1. Identify the objects in this elevator simulation 
  3374. problem. The problem statement specifies many objects 
  3375. working together to simulate the elevator and its 
  3376. interactions with the various people, floors of the 
  3377. building, buttons, etc. Locate the <i>nouns</i> from the <br>
  3378.  
  3379. </page>
  3380. <page>
  3381. problem statement; with high likelihood, these 
  3382. represent most of the objects necessary to implement 
  3383. the elevator simulation. <br>
  3384. <spacer width=16 height=1>2. For each object you identify, write one precisely 
  3385. worded paragraph that captures all the facts about that 
  3386. object from the problem statement. <br>
  3387. <font size=18>Notes</font><br>
  3388. 1. This is a good team exercise. Ideally you should 
  3389. work in a group of two to four people. This will help 
  3390. you and your teammates reinforce one another's efforts, 
  3391. and challenge and refine each other's design and 
  3392. implementation approaches. <br>
  3393.  
  3394. </page>
  3395. <page>
  3396. 2. Your group should compete with other groups in your 
  3397. class to develop the "best" design and implementation. <br>
  3398. <spacer width=16 height=1>3. You will learn how to implement "randomness" in 
  3399. the next chapter where we study random number 
  3400. generation. Random number generation helps you do 
  3401. things like simulate coin tossing and dice rolling. It will 
  3402. also help you simulate people arriving at random to use 
  3403. the elevator.<br>
  3404. <spacer width=16 height=1>4. We have made a number of simplifying assumptions. 
  3405. You may decide to supply additional details.<br>
  3406. <spacer width=16 height=1>5. Because the real world is so object oriented, it will be 
  3407. quite natural for you to pursue this project even though 
  3408. you have not yet formally studied object orientation.<br>
  3409.  
  3410. </page>
  3411. <page>
  3412. 6. Do not worry about perfection. System design is not 
  3413. a perfect and complete process, so you should pursue 
  3414. this project only on a best-efforts basis.<br>
  3415. <font size=18>Questions</font><br>
  3416. 1. How might you decide if the elevator is able to handle the anticipated traffic volume? <br>
  3417. 2. Why is it so much more complicated to implement a 
  3418. three-story (or larger) building?<br>
  3419. 3. We will see later that once we have created one elevator object, it is easy to create as many as we want. 
  3420. What problems do you foresee in having several elevators, each of which may pick up and discharge passengers at every floor in the building?<br>
  3421.  
  3422. </page>
  3423. <page>
  3424. 4. For simplicity, we have given our elevator and each 
  3425. floor a capacity of one passenger. What problems do 
  3426. you foresee in being able to increase these capacities?<br>
  3427.  
  3428. </page>
  3429. </section>
  3430. <section type=Body name=Default title="2.24 Summary">
  3431. <page>
  3432. <font size=18 bold>2.24 Summary</font><hr>
  3433. <indent width=8 delay>*   A procedure for solving a problem in terms of the 
  3434. actions to be executed and the order in which these 
  3435. actions should be executed is called an algorithm. </indent>
  3436. <indent width=8 delay>*   Specifying the order in which statements are to be 
  3437. executed in a computer program is called program control. </indent>
  3438. <indent width=8 delay>*   Pseudocode helps the programmer "think out" a program before attempting to write it in a programming 
  3439. language such as C++.</indent>
  3440. <indent width=8 delay>*  Declarations are messages to the compiler telling it 
  3441. the names and attributes of variables and telling it to </indent>
  3442.  
  3443. </page>
  3444. <page>
  3445. <indent width=8 delay>*   reserve space for variables.</indent>
  3446. <indent width=8 delay>*   A selection structure is used to choose among alternative courses of action. </indent>
  3447. <indent width=8 delay>*   The <b>if</b> selection structure executes an indicated action 
  3448. only when the condition is true. </indent>
  3449. <indent width=8 delay>*   The <b>if/else</b> selection structure specifies separate 
  3450. actions to be executed when the condition is true and 
  3451. when the condition is false. </indent>
  3452. <indent width=8 delay>*   Whenever more than one statement is to be executed 
  3453. where normally only a single statement is expected, 
  3454. these statements must be enclosed in braces forming a 
  3455. compound statement. A compound statement can be 
  3456. placed anywhere a single statement can be placed. </indent>
  3457.  
  3458. </page>
  3459. <page>
  3460. <indent width=8 delay>*   An empty statement indicating that no action is to be 
  3461. taken is indicated by placing a semicolon (<b>;</b>) where a 
  3462. statement would normally be.</indent>
  3463. <indent width=8 delay>*   A repetition structure specifies that an action is to be 
  3464. repeated while some condition remains true. </indent>
  3465. <indent width=8 delay>*   The format for the <b>while</b> repetition structure is </indent>
  3466. <font size=2><br></font><font size=11><pre>
  3467. while ( <i>condition</i> )<p>
  3468.    <i>statement</i><p>
  3469. </pre></font>
  3470. <indent width=8 delay>*   A value that contains a fractional part is referred to as 
  3471. a floating-point number and is represented by the data 
  3472. type <b>float</b>.</indent>
  3473. <indent width=8 delay>*   The unary cast operator <b>static_cast< float >()</b> creates 
  3474. a temporary floating-point copy of its operand. </indent>
  3475.  
  3476. </page>
  3477. <page>
  3478. <indent width=8 delay>*   C++ provides the arithmetic assignment operators 
  3479. <b>+=</b>, <b>-=</b>, <b>*=</b>, <b>/=</b>, and <b>%=</b> that help abbreviate certain 
  3480. common types of expressions. </indent>
  3481. <indent width=8 delay>*   C++ provides the increment (<b>++</b>) and decrement (<b>--</b>) 
  3482. operators to increment or decrement a variable by 1. If 
  3483. the operator is prefixed to the variable, the variable is 
  3484. incremented or decremented by 1 first, then used in its 
  3485. expression. If the operator is postfixed to the variable, 
  3486. the variable is used in its expression, then incremented 
  3487. or decremented by 1.</indent>
  3488. <indent width=8 delay>*  A loop is a group of instructions the computer executes repeatedly until some terminating condition is satisfied. Two forms of repetition are counter-controlled </indent>
  3489.  
  3490. </page>
  3491. <page>
  3492. <indent width=8 delay>*   repetition and sentinel-controlled repetition.</indent>
  3493. <indent width=8 delay>*   A loop counter is used to count repetitions for a 
  3494. group of instructions. It is incremented (or decremented) usually by 1 each time the group of instructions is performed. </indent>
  3495. <indent width=8 delay>*   Sentinel values are generally used to control repetition when the precise number of repetitions is not 
  3496. known in advance and the loop includes statements that 
  3497. obtain data each time the loop is performed. A sentinel 
  3498. value is entered after all valid data items have been supplied to the program. Sentinels should be different from 
  3499. valid data items.</indent>
  3500. <indent width=8 delay>*  The <b>for</b> repetition structure handles all the details of </indent>
  3501.  
  3502. </page>
  3503. <page>
  3504. <indent width=8 delay>*   counter-controlled repetition. The general format of the 
  3505. <b>for</b> structure is </indent>
  3506. <font size=2><br></font><font size=11><pre>
  3507. for ( <i>expression1</i>; <i>expression2</i>; <i>expression3</i> ) <p>
  3508.    <i>statement</i><p>
  3509. </pre></font>
  3510. where <i>expression1</i> initializes the loop's control 
  3511. variable, <i>expression2</i> is the loop-continuation 
  3512. condition, and <i>expression3</i> increments the control 
  3513. variable. <br>
  3514. <indent width=8 delay>*   The <b>do/while</b> repetition structure tests the loop-continuation condition at the end of the loop, so the body of 
  3515. the loop will be executed at least once. The format for 
  3516. the <b>do/while</b> structure is</indent>
  3517.  
  3518. </page>
  3519. <page>
  3520. <font size=2><br></font><font size=11><pre>
  3521. do<p>
  3522.    <i>statement<p>
  3523. </i>while ( <i>condition</i> );<p>
  3524. </pre></font>
  3525. <indent width=8 delay>*   The <b>break</b> statement, when executed in one of the 
  3526. repetition structures (<b>for</b>, <b>while</b>, and <b>do/while</b>), causes 
  3527. immediate exit from the structure. </indent>
  3528. <indent width=8 delay>*   The <b>continue</b> statement, when executed in one of the 
  3529. repetition structures (<b>for</b>, <b>while</b>, and <b>do/while</b>), skips 
  3530. any remaining statements in the body of the structure, 
  3531. and proceeds with the next iteration of the loop.</indent>
  3532. <indent width=8 delay>*  The <b>switch</b> statement handles a series of decisions in 
  3533. which a particular variable or expression is tested for 
  3534. values it may assume, and different actions are taken. In </indent>
  3535.  
  3536. </page>
  3537. <page>
  3538. <indent width=8 delay>*   most programs, it is necessary to include a <b>break</b> statement after the statements for each <b>case</b>. Several <b>case</b>s 
  3539. can execute the same statements by listing the <b>case</b> 
  3540. labels together before the statements. The <b>switch</b> structure can only test constant integral expressions. It is not 
  3541. necessary to enclose a multistatement <b>case</b> in braces.</indent>
  3542. <indent width=8 delay>*   On UNIX systems and many others, end-of-file is 
  3543. entered by typing the sequence</indent>
  3544. <font size=2><br></font><font size=11><pre>
  3545. <i><ctrl-d></i> <p>
  3546. </pre></font>
  3547. on a line by itself. On VMS and DOS, end-of-file is 
  3548. entered by typing <br>
  3549. <font size=2><br></font><font size=11><pre>
  3550. <i><ctrl-z></i> <p>
  3551. </pre></font>
  3552.  
  3553. </page>
  3554. <page>
  3555. <indent width=8 delay>*   Logical operators may be used to form complex conditions by combining conditions. The logical operators 
  3556. are <b>&&</b>,<b> ||</b>, and <b>!</b>, meaning logical AND, logical OR, 
  3557. and logical NOT (negation), respectively.</indent>
  3558. <indent width=8 delay>*   A <b>true</b> value is any nonzero value; a <b>false</b> value is 0 
  3559. (zero).</indent>
  3560.  
  3561. </page>
  3562. </section>
  3563. <section type=Popup name=Debug title="Testing">
  3564. <page>
  3565. Programmers normally 
  3566. write conditions such as 
  3567. <b>x == 7</b> with the variable 
  3568. name on the left and the 
  3569. constant on the right. 
  3570. By reversing these so 
  3571. that the constant is on 
  3572. the left and the variable 
  3573. name is on the right as 
  3574. in <b>7 == x</b>, the <br>
  3575.  
  3576. </page>
  3577. <page>
  3578. programmer who 
  3579. accidentally replaces 
  3580. the <b>==</b> operator with <b>=</b> 
  3581. will be protected by the 
  3582. compiler. The compiler 
  3583. will treat this as a 
  3584. syntax error because 
  3585. only a variable name 
  3586. can be placed on the 
  3587. left-hand side of an <br>
  3588.  
  3589. </page>
  3590. <page>
  3591. assignment statement. 
  3592. At least this will 
  3593. prevent the potential 
  3594. devastation of a run-
  3595. time logic error. <br>
  3596. <br>
  3597.  
  3598. </page>
  3599. <page>
  3600. Use your text editor to 
  3601. search for all 
  3602. occurrences of <b>= </b>in 
  3603. your program and 
  3604. check that you have the 
  3605. correct operator in each 
  3606. place.<br>
  3607. <br>
  3608.  
  3609. </page>
  3610. </section>
  3611. <section type=Popup name=Terminology title="Terminology">
  3612. <page>
  3613. <font size=14>
  3614. Symbols<br>
  3615. <b>!</b> (logical negation 
  3616. operator) 
  3617. <a href="%s19p6"><img src=iicons/bullbib.gif></a>
  3618. <br>
  3619. <b>!</b> (logical NOT) 
  3620. <a href="%s19p1"><img src=iicons/bullbib.gif></a>
  3621. <br>
  3622. <b>&&</b> (logical <b>AND</b> 
  3623. operator) 
  3624. <a href="%s19p0"><img src=iicons/bullbib.gif></a>
  3625. <a href="^Errors::c:s0p31"><img src=iicons/bullbib.gif></a>
  3626. <br>
  3627. <b>++</b> operator 
  3628. <a href="%s12p1"><img src=iicons/bullbib.gif></a>
  3629. <br>
  3630. <b>++</b> unary increment 
  3631. operator 
  3632. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3633. <br>
  3634. <b>--</b> unary decrement 
  3635. operator 
  3636. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3637. <br>
  3638. <b>?:</b> (ternary conditional 
  3639. operator) 
  3640. <a href="%s6p3"><img src=iicons/bullbib.gif></a>
  3641. <br>
  3642. </font>
  3643.  
  3644. </page>
  3645. <page>
  3646. <font size=14>
  3647. <b>||</b> (logical <b>OR</b> operator) 
  3648.  
  3649. <a href="%s19p1"><img src=iicons/bullbib.gif></a>
  3650. <a href="%s19p4"><img src=iicons/bullbib.gif></a>
  3651. <a href="%s19p6"><img src=iicons/bullbib.gif></a>
  3652. <br>
  3653. A<br>
  3654. action 
  3655. <a href="%s6p2"><img src=iicons/bullbib.gif></a>
  3656. <a href="%s6p4"><img src=iicons/bullbib.gif></a>
  3657. <a href="^Errors::c:s0p5"><img src=iicons/bullbib.gif></a>
  3658. <a href="%s21p8"><img src=iicons/bullbib.gif></a>
  3659. <br>
  3660. action/decision model of 
  3661. computing 
  3662. <a href="%s6p2"><img src=iicons/bullbib.gif></a>
  3663. <br>
  3664. algorithm 
  3665. <a href="%s2p0"><img src=iicons/bullbib.gif></a>
  3666. <a href="%s5p4"><img src=iicons/bullbib.gif></a>
  3667. <a href="%s6p2"><img src=iicons/bullbib.gif></a>
  3668. <a href="%s8p0"><img src=iicons/bullbib.gif></a>
  3669.  
  3670. <a href="^Engineer::c:s0p7"><img src=iicons/bullbib.gif></a>
  3671. <a href="^Engineer::c:s0p11"><img src=iicons/bullbib.gif></a>
  3672. <br>
  3673. ASCII (American 
  3674. Standard Code for 
  3675. Information Interchange) 
  3676.  
  3677. <a href="%s16p2"><img src=iicons/bullbib.gif></a>
  3678. <br>
  3679. B<br>
  3680. </font>
  3681.  
  3682. </page>
  3683. <page>
  3684. <font size=14>
  3685. body of the loop 
  3686. <a href="%s14p2"><img src=iicons/bullbib.gif></a>
  3687.  
  3688. <a href=""><img src=iicons/bullbib.gif></a>
  3689. <br>
  3690. <b>break</b> 
  3691. <a href="%s18p0"><img src=iicons/bullbib.gif></a>
  3692. <a href="^Practice::c:s0p37"><img src=iicons/bullbib.gif></a>
  3693. <br>
  3694. C<br>
  3695. <b>case</b> label 
  3696. <a href="%s16p0"><img src=iicons/bullbib.gif></a>
  3697. <a href="%s16p6"><img src=iicons/bullbib.gif></a>
  3698. <br>
  3699. cast operator 
  3700. <a href="%s9p10"><img src=iicons/bullbib.gif></a>
  3701. <a href="%s9p13"><img src=iicons/bullbib.gif></a>
  3702.  
  3703. <a href="%s9p14"><img src=iicons/bullbib.gif></a>
  3704. <br>
  3705. <b>char</b> 
  3706. <a href="%s16p1"><img src=iicons/bullbib.gif></a>
  3707. <br>
  3708. <b>cin.get()</b> 
  3709. <a href="%s16p1"><img src=iicons/bullbib.gif></a>
  3710. <a href="%s16p3"><img src=iicons/bullbib.gif></a>
  3711.  
  3712. <a href="%s16p6"><img src=iicons/bullbib.gif></a>
  3713. <br>
  3714. compound statement 
  3715. <a href="%s6p9"><img src=iicons/bullbib.gif></a>
  3716.  
  3717. <a href="%s7p1"><img src=iicons/bullbib.gif></a>
  3718. <a href="^Errors::c:s0p1"><img src=iicons/bullbib.gif></a>
  3719. <a href="%s9p10"><img src=iicons/bullbib.gif></a>
  3720. <br>
  3721. conditional operator (<b>?:</b>) 
  3722.  
  3723. <a href="%s6p3"><img src=iicons/bullbib.gif></a>
  3724. <br>
  3725. </font>
  3726.  
  3727. </page>
  3728. <page>
  3729. <font size=14>
  3730. <b>continue</b> 
  3731. <a href="^Practice::c:s0p37"><img src=iicons/bullbib.gif></a>
  3732. <br>
  3733. control structure 
  3734. <a href="%s4p2"><img src=iicons/bullbib.gif></a>
  3735. <br>
  3736. counter-controlled 
  3737. repetition 
  3738. <a href="%s8p1"><img src=iicons/bullbib.gif></a>
  3739. <a href="%s13p0"><img src=iicons/bullbib.gif></a>
  3740. <a href="%s14p0"><img src=iicons/bullbib.gif></a>
  3741. <br>
  3742. D<br>
  3743. decision 
  3744. <a href="%s5p4"><img src=iicons/bullbib.gif></a>
  3745. <a href="%s6p2"><img src=iicons/bullbib.gif></a>
  3746. <a href="%s21p8"><img src=iicons/bullbib.gif></a>
  3747. <br>
  3748. decrement operator 
  3749. <a href="^Illustration::c:s0p12"><img src=iicons/bullbib.gif></a>
  3750. <br>
  3751. <b>default</b> case 
  3752. <a href="%s16p0"><img src=iicons/bullbib.gif></a>
  3753. <a href="%s16p8"><img src=iicons/bullbib.gif></a>
  3754.  
  3755. <a href="%s16p10"><img src=iicons/bullbib.gif></a>
  3756. <br>
  3757. definite repetition 
  3758. <a href="%s8p1"><img src=iicons/bullbib.gif></a>
  3759. <br>
  3760. definition 
  3761. <a href="%s13p1"><img src=iicons/bullbib.gif></a>
  3762. <br>
  3763. delay loop 
  3764. <a href="^Engineer::c:s0p14"><img src=iicons/bullbib.gif></a>
  3765. <br>
  3766. <b>do/while</b> repetition 
  3767. structure 
  3768. <a href="%s17p0"><img src=iicons/bullbib.gif></a>
  3769. <br>
  3770. </font>
  3771.  
  3772. </page>
  3773. <page>
  3774. <font size=14>
  3775. <b>double</b> 
  3776. <a href="%s15p5"><img src=iicons/bullbib.gif></a>
  3777. <br>
  3778. double-selection 
  3779. structure 
  3780. <a href="%s4p6"><img src=iicons/bullbib.gif></a>
  3781. <a href="%s10p6"><img src=iicons/bullbib.gif></a>
  3782. <a href="%s16p0"><img src=iicons/bullbib.gif></a>
  3783. <br>
  3784. E<br>
  3785. empty statement 
  3786. <a href="^Engineer::c:s0p3"><img src=iicons/bullbib.gif></a>
  3787. <br>
  3788. <b>EOF</b> 
  3789. <a href="%s16p1"><img src=iicons/bullbib.gif></a>
  3790. <a href="%s16p4"><img src=iicons/bullbib.gif></a>
  3791. <br>
  3792. F<br>
  3793. fatal error 
  3794. <a href="^Errors::c:s0p11"><img src=iicons/bullbib.gif></a>
  3795. <br>
  3796. fixed-point format 
  3797. <a href="%s9p17"><img src=iicons/bullbib.gif></a>
  3798. <br>
  3799. <b>float</b> 
  3800. <a href="%s9p11"><img src=iicons/bullbib.gif></a>
  3801. <br>
  3802. <b>for</b> repetition structure 
  3803.  
  3804. <a href="%s14p0"><img src=iicons/bullbib.gif></a>
  3805. <br>
  3806. G<br>
  3807. "garbage" value 
  3808. <a href="%s8p3"><img src=iicons/bullbib.gif></a>
  3809. <br>
  3810. </font>
  3811.  
  3812. </page>
  3813. <page>
  3814. <font size=14>
  3815. I<br>
  3816. <b>if</b> selection structure 
  3817. <a href="%s4p6"><img src=iicons/bullbib.gif></a>
  3818.  
  3819. <a href="%s6p0"><img src=iicons/bullbib.gif></a>
  3820. <a href="%s6p9"><img src=iicons/bullbib.gif></a>
  3821. <br>
  3822. increment operator 
  3823. <a href="^Illustration::c:s0p12"><img src=iicons/bullbib.gif></a>
  3824. <br>
  3825. indefinite repetition 
  3826. <a href="%s9p1"><img src=iicons/bullbib.gif></a>
  3827. <br>
  3828. infinite loop 
  3829. <a href="^Errors::c:s0p5"><img src=iicons/bullbib.gif></a>
  3830. <a href="%s9p11"><img src=iicons/bullbib.gif></a>
  3831.  
  3832. <a href="%s14p5"><img src=iicons/bullbib.gif></a>
  3833. <a href=""><img src=iicons/bullbib.gif></a>
  3834. <a href="^Errors::c:s0p28"><img src=iicons/bullbib.gif></a>
  3835. <br>
  3836. initialization phase 
  3837. <a href="^Engineer::c:s0p5"><img src=iicons/bullbib.gif></a>
  3838. <br>
  3839. integer division 
  3840. <a href="%s9p12"><img src=iicons/bullbib.gif></a>
  3841. <br>
  3842. <b>ios::fixed</b> 
  3843. <a href="%s9p16"><img src=iicons/bullbib.gif></a>
  3844. <a href="%s15p7"><img src=iicons/bullbib.gif></a>
  3845. <br>
  3846. <b>ios::showpoint</b> 
  3847. <a href="%s9p16"><img src=iicons/bullbib.gif></a>
  3848. <a href="%s15p7"><img src=iicons/bullbib.gif></a>
  3849. <br>
  3850. K<br>
  3851. keyword 
  3852. <a href="^Errors::c:s0p3"><img src=iicons/bullbib.gif></a>
  3853. <br>
  3854. L<br>
  3855. </font>
  3856.  
  3857. </page>
  3858. <page>
  3859. <font size=14>
  3860. logic error 
  3861. <a href="^Errors::c:s0p7"><img src=iicons/bullbib.gif></a>
  3862. <br>
  3863. logical <b>AND</b> 
  3864. <a href="%s19p0"><img src=iicons/bullbib.gif></a>
  3865. <br>
  3866. logical negation 
  3867. <a href="%s19p1"><img src=iicons/bullbib.gif></a>
  3868. <br>
  3869. logical operators 
  3870. <a href="%s19p0"><img src=iicons/bullbib.gif></a>
  3871. <br>
  3872. logical <b>OR</b> 
  3873. <a href="%s19p1"><img src=iicons/bullbib.gif></a>
  3874. <br>
  3875. <b>long</b> 
  3876. <a href="%s16p12"><img src=iicons/bullbib.gif></a>
  3877. <br>
  3878. loop counter 
  3879. <a href="^Errors::c:s0p8"><img src=iicons/bullbib.gif></a>
  3880. <a href="%s13p0"><img src=iicons/bullbib.gif></a>
  3881. <br>
  3882. loop-continuation 
  3883. condition 
  3884. <a href="%s13p2"><img src=iicons/bullbib.gif></a>
  3885. <a href="%s14p0"><img src=iicons/bullbib.gif></a>
  3886. <a href="%s17p0"><img src=iicons/bullbib.gif></a>
  3887.  
  3888. <a href="%s17p2"><img src=iicons/bullbib.gif></a>
  3889. <a href="^Errors::c:s0p20"><img src=iicons/bullbib.gif></a>
  3890. <br>
  3891. lvalue 
  3892. <a href="%s12p4"><img src=iicons/bullbib.gif></a>
  3893. <a href="%s20p2"><img src=iicons/bullbib.gif></a>
  3894. <br>
  3895. M<br>
  3896. multiple selection 
  3897. <a href="%s21p6"><img src=iicons/bullbib.gif></a>
  3898. <br>
  3899. </font>
  3900.  
  3901. </page>
  3902. <page>
  3903. <font size=14>
  3904. multiple-selection 
  3905. structure 
  3906. <a href="%s4p7"><img src=iicons/bullbib.gif></a>
  3907. <a href="%s16p0"><img src=iicons/bullbib.gif></a>
  3908. <br>
  3909. N<br>
  3910. nested control structures 
  3911.  
  3912. <a href="%s21p3"><img src=iicons/bullbib.gif></a>
  3913. <br>
  3914. O<br>
  3915. off-by-one error 
  3916. <a href="^Errors::c:s0p9"><img src=iicons/bullbib.gif></a>
  3917.  
  3918. <a href="%s14p2"><img src=iicons/bullbib.gif></a>
  3919. <a href="^Errors::c:s0p15"><img src=iicons/bullbib.gif></a>
  3920. <br>
  3921. P<br>
  3922. parameterized stream 
  3923. manipulator 
  3924. <a href="%s9p16"><img src=iicons/bullbib.gif></a>
  3925. <br>
  3926. postdecrement operator 
  3927.  
  3928. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3929. <br>
  3930. </font>
  3931.  
  3932. </page>
  3933. <page>
  3934. <font size=14>
  3935. postincrement 
  3936. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3937.  
  3938. <a href="%s12p3"><img src=iicons/bullbib.gif></a>
  3939. <br>
  3940. <b>pow</b> function 
  3941. <a href="%s15p9"><img src=iicons/bullbib.gif></a>
  3942. <br>
  3943. predecrement operator 
  3944.  
  3945. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3946. <br>
  3947. preincrement 
  3948. <a href="%s12p0"><img src=iicons/bullbib.gif></a>
  3949.  
  3950. <a href="%s12p3"><img src=iicons/bullbib.gif></a>
  3951. <br>
  3952. pseudocode 
  3953. <a href="%s3p0"><img src=iicons/bullbib.gif></a>
  3954. <a href="%s4p3"><img src=iicons/bullbib.gif></a>
  3955. <a href="%s8p1"><img src=iicons/bullbib.gif></a>
  3956.  
  3957. <a href="%s10p4"><img src=iicons/bullbib.gif></a>
  3958. <a href="^Engineer::c:s0p12"><img src=iicons/bullbib.gif></a>
  3959. <br>
  3960. R<br>
  3961. repetition 
  3962. <a href="%s4p8"><img src=iicons/bullbib.gif></a>
  3963. <a href="%s21p6"><img src=iicons/bullbib.gif></a>
  3964. <a href="%s21p7"><img src=iicons/bullbib.gif></a>
  3965.  
  3966. <a href="%s21p8"><img src=iicons/bullbib.gif></a>
  3967. <br>
  3968. repetition structure 
  3969. <a href="%s4p2"><img src=iicons/bullbib.gif></a>
  3970.  
  3971. <a href="%s7p0"><img src=iicons/bullbib.gif></a>
  3972. <a href="%s9p6"><img src=iicons/bullbib.gif></a>
  3973. <br>
  3974. </font>
  3975.  
  3976. </page>
  3977. <page>
  3978. <font size=14>
  3979. rvalue 
  3980. <a href="%s20p3"><img src=iicons/bullbib.gif></a>
  3981. <br>
  3982. S<br>
  3983. selection 
  3984. <a href="%s4p7"><img src=iicons/bullbib.gif></a>
  3985. <a href="%s21p6"><img src=iicons/bullbib.gif></a>
  3986. <a href="%s21p8"><img src=iicons/bullbib.gif></a>
  3987. <br>
  3988. sentinel value 
  3989. <a href="%s9p1"><img src=iicons/bullbib.gif></a>
  3990. <a href="%s9p6"><img src=iicons/bullbib.gif></a>
  3991.  
  3992. <a href="^Practice::c:s0p11"><img src=iicons/bullbib.gif></a>
  3993. <a href="%s16p4"><img src=iicons/bullbib.gif></a>
  3994. <br>
  3995. sequential execution 
  3996. <a href="%s4p0"><img src=iicons/bullbib.gif></a>
  3997. <br>
  3998. <b>setiosflags</b> 
  3999. <a href="%s9p16"><img src=iicons/bullbib.gif></a>
  4000. <a href="%s15p9"><img src=iicons/bullbib.gif></a>
  4001. <br>
  4002. <b>setprecision</b> 
  4003. <a href="%s9p15"><img src=iicons/bullbib.gif></a>
  4004. <br>
  4005. <b>setw</b> 
  4006. <a href="%s15p9"><img src=iicons/bullbib.gif></a>
  4007. <br>
  4008. <b>short</b> 
  4009. <a href="%s16p12"><img src=iicons/bullbib.gif></a>
  4010. <br>
  4011. single-entry/single-exit 
  4012. control structures 
  4013. <a href="%s4p8"><img src=iicons/bullbib.gif></a>
  4014.  
  4015. <a href="%s21p1"><img src=iicons/bullbib.gif></a>
  4016. <br>
  4017. </font>
  4018.  
  4019. </page>
  4020. <page>
  4021. <font size=14>
  4022. single-selection structure 
  4023.  
  4024. <a href="%s4p6"><img src=iicons/bullbib.gif></a>
  4025. <a href="%s16p0"><img src=iicons/bullbib.gif></a>
  4026. <br>
  4027. stacking 
  4028. <a href="%s4p8"><img src=iicons/bullbib.gif></a>
  4029. <a href="%s5p4"><img src=iicons/bullbib.gif></a>
  4030. <a href="%s6p2"><img src=iicons/bullbib.gif></a>
  4031. <a href="%s21p8"><img src=iicons/bullbib.gif></a>
  4032. <br>
  4033. <b>static_cast()</b> 
  4034. <a href="^Illustration::c:s0p21"><img src=iicons/bullbib.gif></a>
  4035. <br>
  4036. structured programming 
  4037.  
  4038. <a href="%s1p0"><img src=iicons/bullbib.gif></a>
  4039. <a href="%s4p1"><img src=iicons/bullbib.gif></a>
  4040. <a href="^Practice::c:s0p37"><img src=iicons/bullbib.gif></a>
  4041. <br>
  4042. <b>switch</b> selection 
  4043. structure 
  4044. <a href="%s4p6"><img src=iicons/bullbib.gif></a>
  4045. <br>
  4046. T<br>
  4047. ternary operator 
  4048. <a href="%s6p3"><img src=iicons/bullbib.gif></a>
  4049. <br>
  4050. top-down, stepwise 
  4051. refinement 
  4052. <a href="%s9p0"><img src=iicons/bullbib.gif></a>
  4053. <a href="%s9p2"><img src=iicons/bullbib.gif></a>
  4054. <a href="%s10p0"><img src=iicons/bullbib.gif></a>
  4055. <br>
  4056. transfer of control 
  4057. <a href="%s4p0"><img src=iicons/bullbib.gif></a>
  4058. <br>
  4059. U<br>
  4060. </font>
  4061.  
  4062. </page>
  4063. <page>
  4064. <font size=14>
  4065. unary operator 
  4066. <a href="%s9p14"><img src=iicons/bullbib.gif></a>
  4067. <a href="%s19p6"><img src=iicons/bullbib.gif></a>
  4068. <br>
  4069. W<br>
  4070. <b>while</b> repetition structure 
  4071.  
  4072. <a href="%s7p1"><img src=iicons/bullbib.gif></a>
  4073. <br>
  4074. whitespace characters 
  4075.  
  4076. <a href="%s5p1"><img src=iicons/bullbib.gif></a>
  4077. <a href="^Errors::c:s0p26"><img src=iicons/bullbib.gif></a>
  4078. <br>
  4079. <br>
  4080. </font>
  4081.  
  4082. </page>
  4083. </section>
  4084. <section type=Popup name=Portable title="Portability">
  4085. <page>
  4086. In the new C++ draft 
  4087. standard, the scope of 
  4088. the control variable 
  4089. declared in the 
  4090. initialization section of 
  4091. a <b>for</b> structure is 
  4092. different from the scope 
  4093. in older C++ compilers. 
  4094. C++ code created with 
  4095. old C++ compilers can <br>
  4096.  
  4097. </page>
  4098. <page>
  4099. break when compiled 
  4100. on compilers that are 
  4101. compatible with the 
  4102. C++ draft standard. 
  4103. These are two 
  4104. defensive programming 
  4105. strategies that can be 
  4106. used to prevent this 
  4107. problem: Either define 
  4108. control variables with <br>
  4109.  
  4110. </page>
  4111. <page>
  4112. different names in 
  4113. every <b>for</b> structure, or, 
  4114. if you prefer to use the 
  4115. same name for the 
  4116. control variable in 
  4117. several <b>for</b> structures, 
  4118. define the control 
  4119. variable outside and 
  4120. before the first <b>for</b> 
  4121. loop.<br>
  4122.  
  4123. </page>
  4124. <page>
  4125. Testing for the 
  4126. symbolic constant <b>EOF</b> 
  4127. rather than 1 makes 
  4128. programs more 
  4129. portable. The ANSI 
  4130. standard states that 
  4131. <b>EOF</b> is a negative 
  4132. integral value (but not 
  4133. necessarily 1). Thus, 
  4134. <b>EOF</b> could have <br>
  4135.  
  4136. </page>
  4137. <page>
  4138. different values on 
  4139. different systems.<br>
  4140. <br>
  4141.  
  4142. </page>
  4143. <page>
  4144. The keystroke 
  4145. combinations for 
  4146. entering end-of-file are 
  4147. system dependent. <br>
  4148. <br>
  4149.  
  4150. </page>
  4151. <page>
  4152. Because <b>int</b>s vary in 
  4153. size between systems, 
  4154. use <b>long</b> integers if you 
  4155. expect to process 
  4156. integers outside the 
  4157. range \xb1 32767 and you 
  4158. would like to be able to 
  4159. run the program on 
  4160. several different 
  4161. computer systems. <br>
  4162.  
  4163. </page>
  4164. <page>
  4165. For compatibility with 
  4166. earlier versions of the 
  4167. C++ standard, the <b>bool</b> 
  4168. value <b>true</b> can also be 
  4169. represented by any 
  4170. nonzero value and the 
  4171. <b>bool</b> value <b>false</b> can 
  4172. also be represented as 
  4173. the value <b>0</b>.<br>
  4174. <br>
  4175.  
  4176. </page>
  4177. </section>
  4178. <section type=Popup name=Illustration title="Illustrations">
  4179. <page>
  4180. <a href="^Illustration::c:s0p3">Fig. 2.1</a>  Flowcharting C++'s sequence structure.<br>
  4181. <a href="^Illustration::c:s0p4">Fig. 2.2</a>  C++ keywords.<br>
  4182. <a href="^Illustration::c:s0p5">Fig. 2.3</a>  Flowcharting the single-selection <b>if</b> structure.<br>
  4183. <a href="^Illustration::c:s0p6">Fig. 2.4</a>  Flowcharting the double-selection <b>if/else</b> structure.<br>
  4184. <a href="^Illustration::c:s0p7">Fig. 2.5</a>  Flowcharting the <b>while</b> repetition structure.<br>
  4185. <a href="^Illustration::c:s0p8">Fig. 2.6</a>  Pseudocode algorithm that uses counter-controlled repetition to solve the class 
  4186. average problem.<br>
  4187. <a href="^Code::c:s0p0">Fig. 2.7</a>  C++ program and sample execution for the class average problem with counter-
  4188. controlled repetition.<br>
  4189. <a href="^Illustration::c:s0p9">Fig. 2.8</a>  Pseudocode algorithm that uses sentinel-controlled repetition to solve the class 
  4190. average problem.<br>
  4191. <a href="^Code::c:s0p1">Fig. 2.9</a>  C++ program and sample execution for the class average problem with sentinel-
  4192. controlled repetition.<br>
  4193. <a href="^Illustration::c:s0p10">Fig. 2.10</a>  Pseudocode for examination results problem.<br>
  4194. <a href="^Code::c:s0p2">Fig. 2.11</a>  C++ program and sample executions for examination results problem.<br>
  4195. <a href="^Illustration::c:s0p11">Fig. 2.12</a>  Arithmetic assignment operators.<br>
  4196. <a href="^Illustration::c:s0p12">Fig. 2.13</a>  The increment and decrement operators.<br>
  4197. <a href="^Code::c:s0p3">Fig. 2.14</a>  The difference between preincrementing and postincrementing.<br>
  4198. <a href="^Illustration::c:s0p13">Fig. 2.15</a>  Precedence of the operators encountered so far in the text.<br>
  4199.  
  4200. </page>
  4201. <page>
  4202. <a href="^Code::c:s0p4">Fig. 2.16</a>  Counter-controlled repetition.<br>
  4203. <a href="^Code::c:s0p5">Fig. 2.17</a>  Counter-controlled repetition with the <b>for</b> structure.<br>
  4204. <a href="^Illustration::c:s0p14">Fig. 2.18</a>  Components of a typical <b>for</b> header.<br>
  4205. <a href="^Illustration::c:s0p15">Fig. 2.19</a>  Flowcharting a typical <b>for</b> repetition structure.<br>
  4206. <a href="^Code::c:s0p6">Fig. 2.20</a>  Summation with <b>for</b>.<br>
  4207. <a href="^Code::c:s0p7">Fig. 2.21</a>  Calculating compound interest with <b>for</b>.<br>
  4208. <a href="^Code::c:s0p8">Fig. 2.22</a>  An example using <b>switch</b>.<br>
  4209. <a href="^Illustration::c:s0p16">Fig. 2.23</a>  The <b>switch</b> multiple-selection structure with <b>break</b>s.<br>
  4210. <a href="^Code::c:s0p9">Fig. 2.24</a>  Using the <b>do/while</b> structure.<br>
  4211. <a href="^Illustration::c:s0p17">Fig. 2.25</a>  Flowcharting the <b>do/while</b> repetition structure.<br>
  4212. <a href="^Code::c:s0p10">Fig. 2.26</a>  Using the <b>break</b> statement in a <b>for</b> structure.<br>
  4213. <a href="^Code::c:s0p11">Fig. 2.27</a>  Using the <b>continue</b> statement in a <b>for</b> structure.<br>
  4214. <a href="^Illustration::c:s0p18">Fig. 2.28</a>  Truth table for the <b>&&</b> (logical AND) operator.<br>
  4215. <a href="^Illustration::c:s0p19">Fig. 2.29</a>  Truth table for the <b>||</b> (logical OR) operator.<br>
  4216. <a href="^Illustration::c:s0p20">Fig. 2.30</a>  Truth table for operator <tt><b>!</b></tt> (logical negation).<br>
  4217. <a href="^Illustration::c:s0p21">Fig. 2.31</a>  Operator precedence and associativity.<br>
  4218. <a href="^Illustration::c:s0p22">Fig. 2.32</a>  C++'s single-entry/single-exit sequence, selection, and repetition structures.<br>
  4219. <a href="^Illustration::c:s0p26">Fig. 2.33</a>  Rules for forming structured programs.<br>
  4220. <a href="^Illustration::c:s0p25">Fig. 2.34</a>  The simplest flowchart.<br>
  4221.  
  4222. </page>
  4223. <page>
  4224. <a href="^Illustration::c:s0p24">Fig. 2.35</a>  Repeatedly applying rule 2 of Fig. 2.33 to the simplest flowchart.<br>
  4225. <a href="^Illustration::c:s0p29">Fig. 2.36</a>  Applying rule 3 of Fig. 2.33 to the simplest flowchart.<br>
  4226. <a href="^Illustration::c:s0p28">Fig. 2.37</a>  Stacked, nested, and overlapped building blocks.<br>
  4227. <a href="^Illustration::c:s0p27">Fig. 2.38</a>  An unstructured flowchart.<br>
  4228. <br>
  4229.  
  4230. </page>
  4231. <page>
  4232. <font size=18><a href="~audio/Ch02/02fig001.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.1 - Flowcharting C++'s sequence structure.<img src="graphics/ch02/fig02001.gif" ></font><br>
  4233.  
  4234. </page>
  4235. <page>
  4236. <font size=18><a href="~audio/Ch02/02fig002.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.2 - C++ keywords.<img src="graphics/ch02/fig02002.gif" ></font><br>
  4237.  
  4238. </page>
  4239. <page>
  4240. <font size=18><a href="~audio/Ch02/02fig003.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.3 - Flowcharting the single-selection <b>if</b> structure.<img src="graphics/ch02/fig02003.gif" ></font><br>
  4241.  
  4242. </page>
  4243. <page>
  4244. <font size=18><a href="~audio/Ch02/02fig004.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.4 - Flowcharting the double-selection <b>if/else</b> structure.<img src="graphics/ch02/fig02004.gif" ></font><br>
  4245.  
  4246. </page>
  4247. <page>
  4248. <font size=18><a href="~audio/Ch02/02fig005.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.5 - Flowcharting the <b>while</b> repetition structure.<img src="graphics/ch02/fig02005.gif" ></font><br>
  4249.  
  4250. </page>
  4251. <page>
  4252. <font size=18><a href="~audio/Ch02/02fig006.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.6 - Pseudocode algorithm that uses counter-controlled repetition to solve 
  4253. the class average problem.</font><br>
  4254. <font size=3><br></font><indent width=20><font color=blue size=12><i>Set total to zero</i></font></indent><font size=3><br></font>
  4255. <font size=3><br></font><indent width=20><font color=blue size=12><i>Set grade counter to one</i></font></indent><font size=3><br></font>
  4256. <font size=3><br></font><indent width=20><font color=blue size=12><i></i></font></indent><font size=3><br></font>
  4257. <font size=3><br></font><indent width=20><font color=blue size=12><i>While grade counter is less than or equal to ten</i></font></indent><font size=3><br></font>
  4258. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Input the next grade</i></font></indent><font size=3><br></font>
  4259. <font size=3><br></font><indent width=20><font color=blue size=12><i>      Add the grade into the total</i></font></indent><font size=3><br></font>
  4260. <font size=3><br></font><indent width=20><font color=blue size=12><i>      Add one to the grade counter</i></font></indent><font size=3><br></font>
  4261. <font size=3><br></font><indent width=20><font color=blue size=12><i></i></font></indent><font size=3><br></font>
  4262. <font size=3><br></font><indent width=20><font color=blue size=12><i>Set the class average to the total divided by ten</i></font></indent><font size=3><br></font>
  4263. <font size=3><br></font><indent width=20><font color=blue size=12><i>Print the class average</i></font></indent><font size=3><br></font>
  4264. <br>
  4265.  
  4266. </page>
  4267. <page>
  4268. <font size=18><a href="~audio/Ch02/02fig008.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.8 - Pseudocode algorithm that uses sentinel-controlled repetition to solve 
  4269. the class average problem.</font><br>
  4270. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize total to zero</i></font></indent><font size=3><br></font>
  4271. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize counter to zero</i></font></indent><font size=3><br></font>
  4272. <font size=3><br></font><indent width=20><font color=blue size=12><i>Input the first grade (possibly the sentinel)</i></font></indent><font size=3><br></font>
  4273. <font size=3><br></font><indent width=20><font color=blue size=12><i>While the user has not as yet entered the sentinel </i></font></indent><font size=3><br></font>
  4274. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Add this grade into the running total</i></font></indent><font size=3><br></font>
  4275. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Add one to the grade counter</i></font></indent><font size=3><br></font>
  4276. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Input the next grade (possibly the sentinel)</i></font></indent><font size=3><br></font>
  4277. <font size=3><br></font><indent width=20><font color=blue size=12><i>If the counter is not equal to zero</i></font></indent><font size=3><br></font>
  4278. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Set the average to the total divided by the counter</i></font></indent><font size=3><br></font>
  4279. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Print the average</i></font></indent><font size=3><br></font>
  4280. <font size=3><br></font><indent width=20><font color=blue size=12><i>else</i></font></indent><font size=3><br></font>
  4281. <font size=3><br></font><indent width=20><font color=blue size=12><i>       Print "No grades were entered"</i></font></indent><font size=3><br></font>
  4282. <br>
  4283.  
  4284. </page>
  4285. <page>
  4286. <font size=18><a href="~audio/Ch02/02fig010.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.10 - Pseudocode for examination results problem.</font><br>
  4287. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize passes to zero</i></font></indent><font size=3><br></font>
  4288. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize failures to zero</i></font></indent><font size=3><br></font>
  4289. <font size=3><br></font><indent width=20><font color=blue size=12><i>Initialize student counter to one</i></font></indent><font size=3><br></font>
  4290. <font size=3><br></font><indent width=20><font color=blue size=12><i></i></font></indent><font size=3><br></font>
  4291. <font size=3><br></font><indent width=20><font color=blue size=12><i>While student counter is less than or equal to ten</i></font></indent><font size=3><br></font>
  4292. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Input the next exam result</i></font></indent><font size=3><br></font>
  4293. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>If the student passed</i></font></indent><font size=3><br></font>
  4294. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Add one to passes</i></font></indent><font size=3><br></font>
  4295. <font size=3><br></font><indent width=20><font color=blue size=12><i>else</i></font></indent><font size=3><br></font>
  4296. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Add one to failures</i></font></indent><font size=3><br></font>
  4297. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Add one to student counter</i></font></indent><font size=3><br></font>
  4298. <font size=3><br></font><indent width=20><font color=blue size=12><i></i></font></indent><font size=3><br></font>
  4299. <font size=3><br></font><indent width=20><font color=blue size=12><i>Print the number of passes</i></font></indent><font size=3><br></font>
  4300. <font size=3><br></font><indent width=20><font color=blue size=12><i>Print the number of failures</i></font></indent><font size=3><br></font>
  4301. <font size=3><br></font><indent width=20><font color=blue size=12><i>If more than eight students passed </i></font></indent><font size=3><br></font>
  4302. <font size=3><br></font><indent width=20><font color=blue size=12><i><spacer width=20 height=1>Print "Raise tuition"</i></font></indent><font size=3><br></font>
  4303. <br>
  4304.  
  4305. </page>
  4306. <page>
  4307. <font size=18><a href="~audio/Ch02/02fig012.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.12 - Arithmetic assignment operators.<img src="graphics/ch02/fig02012.gif" ></font><br>
  4308.  
  4309. </page>
  4310. <page>
  4311. <font size=18><a href="~audio/Ch02/02fig013.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.13 - The increment and decrement operators.<img src="graphics/ch02/fig02013.gif" ></font><br>
  4312.  
  4313. </page>
  4314. <page>
  4315. <font size=18><a href="~audio/Ch02/02fig015.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.15 - Precedence of the operators encountered so far in the text.<img src="graphics/ch02/fig02015.gif" ></font><br>
  4316.  
  4317. </page>
  4318. <page>
  4319. <font size=18><a href="~audio/Ch02/02fig018.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.18 - Components of a typical <b>for</b> header.<img src="graphics/ch02/fig02018.gif" ></font><br>
  4320.  
  4321. </page>
  4322. <page>
  4323. <font size=18><a href="~audio/Ch02/02fig019.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.19 - Flowcharting a typical <b>for</b> repetition structure.<img src="graphics/ch02/fig02019.gif" ></font><br>
  4324.  
  4325. </page>
  4326. <page>
  4327. <font size=18><a href="~audio/Ch02/02fig023.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.23 - The <b>switch</b> multiple-selection structure with <b>break</b>s.<img src="graphics/ch02/fig02023.gif" ></font><br>
  4328.  
  4329. </page>
  4330. <page>
  4331. <font size=18><a href="~audio/Ch02/02fig025.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.25 - Flowcharting the <b>do/while</b> repetition structure.<img src="graphics/ch02/fig02025.gif" ></font><br>
  4332.  
  4333. </page>
  4334. <page>
  4335. <font size=18><a href="~audio/Ch02/02fig028.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.28 - Truth table for the <b>&&</b> (logical AND) operator.<img src="graphics/ch02/fig02028.gif" ></font><br>
  4336.  
  4337. </page>
  4338. <page>
  4339. <font size=18>Fig<a href="~audio/Ch02/02fig029.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>ure 2.29 - Truth table for the<b> || </b>(logical OR) operator.<img src="graphics/ch02/fig02029.gif" ></font><br>
  4340.  
  4341. </page>
  4342. <page>
  4343. <font size=18>Fig<a href="~audio/Ch02/02fig030.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>ure 2.30 - Truth table for operator <b>!</b> (logical negation).<img src="graphics/ch02/fig02030.gif" ></font><br>
  4344.  
  4345. </page>
  4346. <page>
  4347. <font size=18><a href="~audio/Ch02/02fig031.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.31 - Operator precedence and associativity.<img src="graphics/ch02/fig02031.gif" ></font><br>
  4348.  
  4349. </page>
  4350. <page>
  4351. <font size=18><a href="~audio/Ch02/02fig032.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.32 - C++'s single-entry/single-exit sequence, selection, and repetition 
  4352. structures. (Part 1 of 2)<img src="graphics/ch02/fig0232a.gif" ></font><br>
  4353.  
  4354. </page>
  4355. <page>
  4356. <font size=18><a href="~audio/Ch02/02fig032.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.32 - C++'s single-entry/single-exit sequence, selection, and repetition 
  4357. structures. (Part 2 of 2)<img src="graphics/ch02/fig0232b.gif" ></font><br>
  4358.  
  4359. </page>
  4360. <page>
  4361. <font size=18><a href="~audio/Ch02/02fig035.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.35 - Repeatedly applying rule 2 of <a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> to the simplest flowchart. </font><br>
  4362. <img src="graphics/ch02/fig02035.gif" ><br>
  4363.  
  4364. </page>
  4365. <page>
  4366. <font size=18><a href="~audio/Ch02/02fig034.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.34 - The simplest flowchart.<img src="graphics/ch02/fig02034.gif" ></font><br>
  4367.  
  4368. </page>
  4369. <page>
  4370. <font size=18><a href="~audio/Ch02/02fig033.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.33 - Rules for forming structured programs.<img src="graphics/ch02/fig02033.gif" ></font><br>
  4371.  
  4372. </page>
  4373. <page>
  4374. <font size=18><a href="~audio/Ch02/02fig038.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.38 - An unstructured flowchart.<img src="graphics/ch02/fig02038.gif" ></font><br>
  4375.  
  4376. </page>
  4377. <page>
  4378. <font size=18><a href="~audio/Ch02/02fig037.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.37 - Stacked, nested, and overlapped buildig blocks.<img src="graphics/ch02/fig02037.gif" ></font><br>
  4379.  
  4380. </page>
  4381. <page>
  4382. <font size=18><a href="~audio/Ch02/02fig036.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.36 - Applying rule 3 of <a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> to the simplest flowchart. (Part 1 of 2) </font><br>
  4383. <img src="graphics/ch02/fig0236a.gif" ><br>
  4384.  
  4385. </page>
  4386. <page>
  4387. <font size=18><a href="~audio/Ch02/02fig036.au"><img src="bckgrnds/icons/audio.gif" align=sidebar></a>Figure 2.36 - Applying rule 3 of <a href="^Illustration::c:s0p26"> <img src="bckgrnds/icons/ill_ico.gif" align=sidebar>Fig. 2.33</a> to the simplest flowchart. (Part 2 of 2) </font><br>
  4388. <img src="graphics/ch02/fig0236b.gif" ><br>
  4389.  
  4390. </page>
  4391. </section>
  4392. <section type=Popup name=Objective title="Objectives">
  4393. <page>
  4394. <indent width=8 delay>*   To understand basic problem solving techniques.</indent>
  4395. <indent width=8 delay>*   To be able to develop algorithms through the process of top-down, stepwise refinement.</indent>
  4396. <indent width=8 delay>*   To be able to use the <b>if</b>, <b>if/else</b>, and <b>switch</b> selection structures to choose 
  4397. among alternative actions.</indent>
  4398. <foreign  name="audio" url="~audio/Ch02/02obj.au">
  4399.  
  4400. </page>
  4401. <page>
  4402. <indent width=8 delay>*   To be able to use the <b>while</b>, <b>do/while</b>, and <b>for</b> repetition structures to execute statements in a program repeatedly.</indent>
  4403. <indent width=8 delay>*   To understand counter-controlled repetition and sentinel-controlled repetition.</indent>
  4404. <indent width=8 delay>*   To be able to use the increment, decrement, assignment, and logical operators.</indent>
  4405.  
  4406. </page>
  4407. <page>
  4408. <indent width=8 delay>*   To be able to use the <b>break</b> and <b>continue</b> program control statements.</indent>
  4409.  
  4410. </page>
  4411. </section>
  4412. <section type=Popup name=Practice title="Good Practices">
  4413. <page>
  4414. Consistently applying 
  4415. reasonable indentation 
  4416. conventions throughout 
  4417. your programs greatly 
  4418. improves program 
  4419. readability. We suggest 
  4420. a fixed-size tab of about 
  4421. 1/4 inch or three blanks 
  4422. per indent.<br>
  4423. <br>
  4424.  
  4425. </page>
  4426. <page>
  4427. Pseudocode is often 
  4428. used to "think out" a 
  4429. program during the 
  4430. program design 
  4431. process. Then the 
  4432. pseudocode program is 
  4433. converted to C++.<br>
  4434. <br>
  4435.  
  4436. </page>
  4437. <page>
  4438. If there are several 
  4439. levels of indentation, 
  4440. each level should be 
  4441. indented the same 
  4442. additional amount of 
  4443. space. <br>
  4444. <br>
  4445.  
  4446. </page>
  4447. <page>
  4448. Indent both body 
  4449. statements of an <b>if/else</b> 
  4450. structure. <br>
  4451. <br>
  4452.  
  4453. </page>
  4454. <page>
  4455. Always putting the 
  4456. braces in an <tt><b>if/else</b></tt> 
  4457. structure (or any 
  4458. control structure) helps 
  4459. prevent their accidental 
  4460. omission, especially 
  4461. when adding statements 
  4462. to an <b>if</b> or <b>else</b> clause at 
  4463. a later time.<br>
  4464. <br>
  4465.  
  4466. </page>
  4467. <page>
  4468. Some programmers 
  4469. prefer to type the 
  4470. beginning and ending 
  4471. braces of compound 
  4472. statements before 
  4473. typing the individual 
  4474. statements within the 
  4475. braces. This helps 
  4476. avoid omitting one or 
  4477. both of the braces.<br>
  4478.  
  4479. </page>
  4480. <page>
  4481. Initialize counters and 
  4482. totals. <br>
  4483. <br>
  4484.  
  4485. </page>
  4486. <page>
  4487. Declare each variable 
  4488. on a separate line.<br>
  4489. <br>
  4490.  
  4491. </page>
  4492. <page>
  4493. When performing 
  4494. division by an 
  4495. expression whose value 
  4496. could be zero, 
  4497. explicitly test for this 
  4498. case and handle it 
  4499. appropriately in your 
  4500. program (such as 
  4501. printing an error 
  4502. message) rather than <br>
  4503.  
  4504. </page>
  4505. <page>
  4506. allowing the fatal error 
  4507. to occur.<br>
  4508. <br>
  4509.  
  4510. </page>
  4511. <page>
  4512. In a sentinel-controlled 
  4513. loop, the prompts 
  4514. requesting data entry 
  4515. should explicitly 
  4516. remind the user what 
  4517. the sentinel value is.<br>
  4518. <br>
  4519.  
  4520. </page>
  4521. <page>
  4522. Prompt the user for 
  4523. each keyboard input. 
  4524. The prompt should 
  4525. indicate the form of the 
  4526. input and any special 
  4527. input values (such as 
  4528. the sentinel value the 
  4529. user should enter to 
  4530. terminate a loop).<br>
  4531. <br>
  4532.  
  4533. </page>
  4534. <page>
  4535. Do not compare 
  4536. floating-point values 
  4537. for equality or 
  4538. inequality. Rather, test 
  4539. that the absolute value 
  4540. of the difference is less 
  4541. than a specified small 
  4542. value.<br>
  4543. <br>
  4544.  
  4545. </page>
  4546. <page>
  4547. Initializing variables 
  4548. when they are declared 
  4549. helps the programmer 
  4550. avoid the problems of 
  4551. uninitialized data.<br>
  4552. <br>
  4553.  
  4554. </page>
  4555. <page>
  4556. Unary operators should 
  4557. be placed next to their 
  4558. operands with no 
  4559. intervening spaces.<br>
  4560. <br>
  4561.  
  4562. </page>
  4563. <page>
  4564. Control counting loops 
  4565. with integer values.<br>
  4566. <br>
  4567.  
  4568. </page>
  4569. <page>
  4570. Indent the statements in 
  4571. the body of each 
  4572. control structure.  <br>
  4573. <br>
  4574.  
  4575. </page>
  4576. <page>
  4577. Put a blank line before 
  4578. and after each control 
  4579. structure to make it 
  4580. stand out in the 
  4581. program. <br>
  4582. <br>
  4583.  
  4584. </page>
  4585. <page>
  4586. Too many levels of 
  4587. nesting can make a 
  4588. program difficult to 
  4589. understand. As a 
  4590. general rule, try to 
  4591. avoid using more than 
  4592. three levels of 
  4593. indentation. <br>
  4594. <br>
  4595.  
  4596. </page>
  4597. <page>
  4598. Vertical spacing above 
  4599. and below control 
  4600. structures, and 
  4601. indentation of the 
  4602. bodies of control 
  4603. structures within the 
  4604. control structure 
  4605. headers gives programs 
  4606. a two-dimensional <br>
  4607.  
  4608. </page>
  4609. <page>
  4610. appearance that greatly 
  4611. improves readability. <br>
  4612. <br>
  4613.  
  4614. </page>
  4615. <page>
  4616. Using the final value in 
  4617. the condition of a <b>while</b> 
  4618. or <b>for</b> structure and 
  4619. using the <b><=</b> relational 
  4620. operator will help avoid 
  4621. off-by-one errors. For a 
  4622. loop used to print the 
  4623. values 1 to 10, for 
  4624. example, the loop-
  4625. continuation condition <br>
  4626.  
  4627. </page>
  4628. <page>
  4629. should be <b>counter <= 
  4630. 10</b> rather than <b>counter 
  4631. < 10</b> (which is an off-
  4632. by-one error) or 
  4633. <b>counter < 11</b> (which is 
  4634. nevertheless correct). 
  4635. Many programmers 
  4636. nevertheless prefer so-
  4637. called zero-based 
  4638. counting in which to <br>
  4639.  
  4640. </page>
  4641. <page>
  4642. count 10 times through 
  4643. the loop, <b>counter</b> 
  4644. would be initialized to 
  4645. zero and the loop-
  4646. continuation test would 
  4647. be <b>counter < 10</b>.<br>
  4648. <br>
  4649.  
  4650. </page>
  4651. <page>
  4652. Place only expressions 
  4653. involving the control 
  4654. variables in the 
  4655. initialization and 
  4656. increment sections of a 
  4657. <b>for</b> structure. 
  4658. Manipulations of other 
  4659. variables should appear 
  4660. either before the loop 
  4661. (if they execute only <br>
  4662.  
  4663. </page>
  4664. <page>
  4665. once like initialization 
  4666. statements) or in the 
  4667. loop body (if they 
  4668. execute once per 
  4669. repetition like 
  4670. incrementing or 
  4671. decrementing 
  4672. statements).<br>
  4673. <br>
  4674.  
  4675. </page>
  4676. <page>
  4677. Although the value of 
  4678. the control variable can 
  4679. be changed in the body 
  4680. of a <b>for</b> loop, avoid 
  4681. doing so because this 
  4682. practice can lead to 
  4683. subtle logic errors. <br>
  4684. <br>
  4685.  
  4686. </page>
  4687. <page>
  4688. Although statements 
  4689. preceding a <b>for</b> and 
  4690. statements in the body 
  4691. of a <b>for</b> can often be 
  4692. merged into the <b>for</b> 
  4693. header, avoid doing so 
  4694. because it can make the 
  4695. program more difficult 
  4696. to read.<br>
  4697. <br>
  4698.  
  4699. </page>
  4700. <page>
  4701. Limit the size of control 
  4702. structure headers to a 
  4703. single line if possible.<br>
  4704. <br>
  4705.  
  4706. </page>
  4707. <page>
  4708. Do not use variables of 
  4709. type <b>float</b> or <b>double</b> to 
  4710. perform monetary 
  4711. calculations. The 
  4712. imprecision of floating-
  4713. point numbers can 
  4714. cause errors that will 
  4715. result in incorrect 
  4716. monetary values. In the 
  4717. exercises, we explore <br>
  4718.  
  4719. </page>
  4720. <page>
  4721. the use of integers to 
  4722. perform monetary 
  4723. calculations. Note: C++ 
  4724. class libraries are 
  4725. becoming available for 
  4726. properly performing 
  4727. monetary calculations.<br>
  4728. <br>
  4729.  
  4730. </page>
  4731. <page>
  4732. In a <b>switch</b> structure 
  4733. when the <b>default</b> clause 
  4734. is listed last, the <b>break</b> 
  4735. statement is not 
  4736. required. Some 
  4737. programmers include 
  4738. this <b>break</b> for clarity 
  4739. and symmetry with 
  4740. other cases. <br>
  4741. <br>
  4742.  
  4743. </page>
  4744. <page>
  4745. Although the <b>case</b> 
  4746. clauses and the <b>default</b> 
  4747. case clause in a <b>switch</b> 
  4748. structure can occur in 
  4749. any order, it is 
  4750. considered a good 
  4751. programming practice 
  4752. to place the <b>default</b> 
  4753. clause last.<br>
  4754. <br>
  4755.  
  4756. </page>
  4757. <page>
  4758. Provide a <b>default</b> case 
  4759. in <b>switch</b> statements. 
  4760. Cases not explicitly 
  4761. tested in a <b>switch</b> 
  4762. statement without a 
  4763. <b>default</b> case are 
  4764. ignored. Including a 
  4765. <b>default</b> case focuses 
  4766. the programmer on the 
  4767. need to process <br>
  4768.  
  4769. </page>
  4770. <page>
  4771. exceptional conditions. 
  4772. There are situations in 
  4773. which no <b>default</b> 
  4774. processing is needed. <br>
  4775. <br>
  4776.  
  4777. </page>
  4778. <page>
  4779. Some programmers 
  4780. always include braces 
  4781. in a <b>do/while</b> structure 
  4782. even if the braces are 
  4783. not necessary. This 
  4784. helps eliminate 
  4785. ambiguity between the 
  4786. <b>while</b> structure and the 
  4787. <b>do/while</b> structure <br>
  4788.  
  4789. </page>
  4790. <page>
  4791. containing one 
  4792. statement.<br>
  4793. <br>
  4794.  
  4795. </page>
  4796. <page>
  4797. Some programmers feel 
  4798. that <b>break</b> and 
  4799. <b>continue</b> violate 
  4800. structured 
  4801. programming. Because 
  4802. the effects of these 
  4803. statements can be 
  4804. achieved by structured 
  4805. programming 
  4806. techniques we will soon <br>
  4807.  
  4808. </page>
  4809. <page>
  4810. learn, these 
  4811. programmers do not 
  4812. use <b>break</b> and 
  4813. <b>continue</b>.<br>
  4814. <br>
  4815.  
  4816. </page>
  4817. </section>
  4818. <section type=Popup name=Perform title="Performance">
  4819. <page>
  4820. In a nested <b>if/else</b> 
  4821. structure, test the 
  4822. conditions that are 
  4823. more likely to be <b>true</b> 
  4824. at the beginning of the 
  4825. nested <b>if/else</b> structure. 
  4826. This will enable the 
  4827. nested <b>if/else</b> structure 
  4828. to run faster and exit 
  4829. earlier than testing <br>
  4830.  
  4831. </page>
  4832. <page>
  4833. infrequently occurring 
  4834. cases.<br>
  4835. <br>
  4836.  
  4837. </page>
  4838. <page>
  4839. A nested <b>if/else</b> 
  4840. structure can be much 
  4841. faster than a series of 
  4842. single selection <b>if</b> 
  4843. structures because of 
  4844. the possibility of early 
  4845. exit after one of the 
  4846. conditions is satisfied. <br>
  4847. <br>
  4848.  
  4849. </page>
  4850. <page>
  4851. Programmers can write 
  4852. programs a bit faster 
  4853. and compilers can 
  4854. compile programs a bit 
  4855. faster when the 
  4856. "abbreviated" 
  4857. assignment operators 
  4858. are used. Some 
  4859. compilers generate 
  4860. code that runs faster <br>
  4861.  
  4862. </page>
  4863. <page>
  4864. when "abbreviated" 
  4865. assignment operators 
  4866. are used.<br>
  4867. <br>
  4868.  
  4869. </page>
  4870. <page>
  4871. Many of the 
  4872. performance tips we 
  4873. mention in this text 
  4874. result in nominal 
  4875. improvements, so the 
  4876. reader may be tempted 
  4877. to ignore them. 
  4878. Significant 
  4879. performance 
  4880. improvement is often <br>
  4881.  
  4882. </page>
  4883. <page>
  4884. realized when a 
  4885. supposedly nominal 
  4886. improvement is placed 
  4887. in a loop that may 
  4888. repeat many times.<br>
  4889. <br>
  4890.  
  4891. </page>
  4892. <page>
  4893. Many compilers 
  4894. contain optimization 
  4895. features that improve 
  4896. the code you write, but 
  4897. it is still better to write 
  4898. good code from the 
  4899. start.<br>
  4900. <br>
  4901.  
  4902. </page>
  4903. <page>
  4904. Avoid placing 
  4905. expressions whose 
  4906. values do not change 
  4907. inside loops. But even 
  4908. if you do, many of 
  4909. today's sophisticated 
  4910. optimizing compilers 
  4911. will automatically place 
  4912. such expressions 
  4913. outside loops in the <br>
  4914.  
  4915. </page>
  4916. <page>
  4917. generated machine 
  4918. language code.<br>
  4919. <br>
  4920.  
  4921. </page>
  4922. <page>
  4923. Using smaller integer 
  4924. sizes may result in a 
  4925. slower program if the 
  4926. machine's instructions 
  4927. for manipulating them 
  4928. are not as efficient as 
  4929. for the natural size 
  4930. integers (e.g., sign 
  4931. extension must be done 
  4932. on them).<br>
  4933.  
  4934. </page>
  4935. <page>
  4936. In performance-
  4937. oriented situations 
  4938. where memory is at a 
  4939. premium or execution 
  4940. speed is crucial, it may 
  4941. be desirable to use 
  4942. smaller integer sizes. <br>
  4943. <br>
  4944.  
  4945. </page>
  4946. <page>
  4947. The <b>break</b> and 
  4948. <b>continue</b> statements, 
  4949. when used properly, 
  4950. perform faster than the 
  4951. corresponding 
  4952. structured techniques 
  4953. we will soon learn.<br>
  4954. <br>
  4955.  
  4956. </page>
  4957. <page>
  4958. An expressions using 
  4959. operator <b>&&</b>, if the 
  4960. separate conditions are 
  4961. independent of one 
  4962. another make the 
  4963. condition that is most 
  4964. likely to be <b>false</b> the 
  4965. leftmost condition. In 
  4966. expressions using 
  4967. operator <b>||</b>, make the <br>
  4968.  
  4969. </page>
  4970. <page>
  4971. condition that is most 
  4972. likely to be <b>true</b> the 
  4973. leftmost condition. This 
  4974. can reduce a program's 
  4975. execution time.<br>
  4976. <br>
  4977.  
  4978. </page>
  4979. </section>
  4980. <section type=Popup name=Code title="Code Examples">
  4981. <page>
  4982. <font size=18>Figure 2.7  C++ program and sample execution for the class average problem with 
  4983. counter-controlled repetition.</font><br>
  4984. <applet code=gsl.win.helper.TextBox width=580 height=300>
  4985. <param  name="file" value="code/ch02/fig02_07.txt">
  4986. </applet><br>
  4987. <br>
  4988. <foreign  name="copy2disk" url="!jcpy Source/fig02_07.jar">
  4989. <foreign  name="audio" url="~audio/Ch02/02fig007.au">
  4990. <foreign  name="execute" url="!jarexe Run/fig02_07.jar">
  4991. <br>
  4992.  
  4993. </page>
  4994. <page>
  4995. <font size=18>Figure 2.9 - C++ program and sample execution for the class average problem with 
  4996. sentinel-controlled repetition.</font><br>
  4997. <applet code=gsl.win.helper.TextBox width=580 height=300>
  4998. <param  name="file" value="code/ch02/fig02_09.txt">
  4999. </applet><br>
  5000. <br>
  5001. <foreign  name="copy2disk" url="!jcpy Source/fig02_09.jar">
  5002. <foreign  name="audio" url="~audio/Ch02/02fig009.au">
  5003. <foreign  name="execute" url="!jarexe Run/fig02_09.jar">
  5004. <br>
  5005.  
  5006. </page>
  5007. <page>
  5008. <font size=18>Figure 2.11  C++ program and sample executions for examination results problem.</font><br>
  5009. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5010. <param  name="file" value="code/ch02/fig02_011.txt">
  5011. </applet><br>
  5012. <br>
  5013. <foreign  name="copy2disk" url="!jcpy Source/fig02_11.jar">
  5014. <foreign  name="audio" url="~audio/Ch02/02fig011.au">
  5015. <foreign  name="execute" url="!jarexe Run/fig02_11.jar">
  5016. <br>
  5017.  
  5018. </page>
  5019. <page>
  5020. <font size=18>Figure 2.14  The difference between preincrementing and postincrementing.</font><br>
  5021. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5022. <param  name="file" value="code/ch02/fig02_014.txt">
  5023. </applet><br>
  5024. <br>
  5025. <foreign  name="copy2disk" url="!jcpy Source/fig02_14.jar">
  5026. <foreign  name="audio" url="~audio/Ch02/02fig014.au">
  5027. <foreign  name="execute" url="!jarexe Run/fig02_14.jar">
  5028. <br>
  5029.  
  5030. </page>
  5031. <page>
  5032. <font size=18>Figure 2.16  Counter-controlled repetition.</font><br>
  5033. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5034. <param  name="file" value="code/ch02/fig02_016.txt">
  5035. </applet><br>
  5036. <br>
  5037. <foreign  name="copy2disk" url="!jcpy Source/fig02_16.jar">
  5038. <foreign  name="audio" url="~audio/Ch02/02fig016.au">
  5039. <foreign  name="execute" url="!jarexe Run/fig02_16.jar">
  5040. <br>
  5041.  
  5042. </page>
  5043. <page>
  5044. <font size=18>Figure 2.17  Counter-controlled repetition with the <b>for</b> structure.</font><br>
  5045. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5046. <param  name="file" value="code/ch02/fig02_017.txt">
  5047. </applet><br>
  5048. <br>
  5049. <foreign  name="copy2disk" url="!jcpy Source/fig02_17.jar">
  5050. <foreign  name="audio" url="~audio/Ch02/02fig017.au">
  5051. <foreign  name="execute" url="!jarexe Run/fig02_17.jar">
  5052. <br>
  5053.  
  5054. </page>
  5055. <page>
  5056. <font size=18>Figure 2.20  Summation with <b>for</b>.</font><br>
  5057. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5058. <param  name="file" value="code/ch02/fig02_020.txt">
  5059. </applet><br>
  5060. <br>
  5061. <foreign  name="copy2disk" url="!jcpy Source/fig02_20.jar">
  5062. <foreign  name="audio" url="~audio/Ch02/02fig020.au">
  5063. <foreign  name="execute" url="!jarexe Run/fig02_20.jar">
  5064. <br>
  5065.  
  5066. </page>
  5067. <page>
  5068. <font size=18>Figure 2.21  Calculating compound interest with <b>for</b>.</font><br>
  5069. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5070. <param  name="file" value="code/ch02/fig02_021.txt">
  5071. </applet><br>
  5072. <br>
  5073. <foreign  name="copy2disk" url="!jcpy Source/fig02_21.jar">
  5074. <foreign  name="audio" url="~audio/Ch02/02fig021.au">
  5075. <foreign  name="execute" url="!jarexe Run/fig02_21.jar">
  5076. <br>
  5077.  
  5078. </page>
  5079. <page>
  5080. <font size=18>Figure 2.22  An example using <b>switch</b>.</font><br>
  5081. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5082. <param  name="file" value="code/ch02/fig02_022.txt">
  5083. </applet><br>
  5084. <br>
  5085. <foreign  name="copy2disk" url="!jcpy Source/fig02_22.jar">
  5086. <foreign  name="audio" url="~audio/ch02/02fig022.au">
  5087. <foreign  name="execute" url="!jarexe Run/fig02_22.jar">
  5088. <br>
  5089.  
  5090. </page>
  5091. <page>
  5092. <font size=18>Figure 2.24  Using the <b>do/while</b> structure.</font><br>
  5093. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5094. <param  name="file" value="code/ch02/fig02_024.txt">
  5095. </applet><br>
  5096. <br>
  5097. <foreign  name="copy2disk" url="!jcpy Source/fig02_24.jar">
  5098. <foreign  name="audio" url="~audio/Ch02/02fig024.au">
  5099. <foreign  name="execute" url="!jarexe Run/fig02_24.jar">
  5100. <br>
  5101.  
  5102. </page>
  5103. <page>
  5104. <font size=18>Figure 2.26  Using the <b>break</b> statement in a <b>for</b> structure.</font><br>
  5105. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5106. <param  name="file" value="code/ch02/fig02_026.txt">
  5107. </applet><br>
  5108. <br>
  5109. <foreign  name="copy2disk" url="!jcpy Source/fig02_26.jar">
  5110. <foreign  name="audio" url="~audio/Ch02/02fig026.au">
  5111. <foreign  name="execute" url="!jarexe Run/fig02_26.jar">
  5112. <br>
  5113.  
  5114. </page>
  5115. <page>
  5116. <font size=18>Figure 2.27  Using the <b>continue</b> statement in a <b>for</b> structure.</font><br>
  5117. <applet code=gsl.win.helper.TextBox width=580 height=300>
  5118. <param  name="file" value="code/ch02/fig02_027.txt">
  5119. </applet><br>
  5120. <br>
  5121. <foreign  name="copy2disk" url="!jcpy Source/fig02_27.jar">
  5122. <foreign  name="audio" url="~audio/Ch02/02fig027.au">
  5123. <foreign  name="execute" url="!jarexe Run/fig02_27.jar">
  5124. <br>
  5125.  
  5126. </page>
  5127. </section>
  5128. <section type=Popup name=Exercises title="Exercises">
  5129. <page pagename="Exercise 2.1">
  5130. <b>Exercise 2.1</b><br>
  5131. Exercises 2.1 through 2.10 correspond to Sections 2.1 through 2.12.<br>
  5132. Exercises 2.11 through 2.13 correspond to Sections 2.13 through 2.21.<br>
  5133. <br>
  5134. Answer each of the following questions.<br>
  5135. a)  All programs can be written in terms of three types of control structures: 
  5136. _______, ________, and ________.<br>
  5137. b)  The ________selection structure is used to execute one action when a 
  5138. condition is <b>true</b> and another action when that condition is <b>false</b>.<br>
  5139. c)  Repetition of a set of instructions a specific number of times is called<p>
  5140. _______ repetition.<br>
  5141. <foreign  name="answers" url="^Answers::c:s0p0">
  5142.  
  5143. </page>
  5144. <page pagename="Exercise 2.1">
  5145. d)  When it is not known in advance how many times a set of statements will be 
  5146. repeated, a________value can be used to terminate the repetition.<br>
  5147. <foreign  name="answers" url="^Answers::c:s0p0">
  5148.  
  5149. </page>
  5150. <page pagename="Exercise 2.2">
  5151. <b>Exercise 2.2</b><br>
  5152. Write four different C++ statements that each add 1 to integer variable <b>x</b>.<br>
  5153. <foreign  name="answers" url="^Answers::c:s0p1">
  5154.  
  5155. </page>
  5156. <page pagename="Exercise 2.3">
  5157. <b>Exercise 2.3</b><br>
  5158. Write C++ statements to accomplish each of the following:<br>
  5159. a)  Assign the sum of <b>x</b> and <b>y</b> to <b>z</b> and increment the value of <b>x</b> by <b>1</b> after the 
  5160. calculation.<br>
  5161. b)  Test if the value of the variable count is greater than 10. If it is, print 
  5162. "<b>Count is greater than 10.</b>"<br>
  5163. c)  Decrement the variable <b>x</b> by <b>1</b> then subtract it from the variable <b>total</b>.<br>
  5164. d)  Calculate the remainder after <b>q</b> is divided by <b>divisor</b> and assign the result to 
  5165. <b>q</b>. Write this statement two different ways.<br>
  5166. <foreign  name="answers" url="^Answers::c:s0p2">
  5167.  
  5168. </page>
  5169. <page pagename="Exercise 2.4">
  5170. <b>Exercise 2.4</b><br>
  5171. Write a C++ statement to accomplish each of the following tasks.<br>
  5172. a)  Declare variables <b>sum</b> and <b>x</b> to be of type <b>int</b>.<br>
  5173. b)  Initialize variable <b>x</b> to <b>1</b>.<br>
  5174. c)  Initialize variable <b>sum</b> to <b>0</b>.<br>
  5175. d)  Add variable<b> x</b> to variable <b>sum</b> and assign the result to variable <b>sum</b>.<br>
  5176. e)  Print "<b>The sum is:</b> " followed by the value of variable <b>sum</b>.<br>
  5177. <foreign  name="answers" url="^Answers::c:s0p3">
  5178.  
  5179. </page>
  5180. <page pagename="Exercise 2.5">
  5181. <b>Exercise 2.5</b><br>
  5182. Combine the statements that you wrote in<a href="^Exercises::c:s0p4"> <img src="bckgrnds/icons/exercise.gif" align=sidebar>Exercise 2.4</a> into a program that 
  5183. calculates and prints the sum of the integers from 1 to 10. Use the <b>while</b> 
  5184. structure to loop through the calculation and increment statements. The loop 
  5185. should terminate when the value of <b>x</b> becomes <b>11</b>.<br>
  5186. <foreign  name="answers" url="^Answers::c:s0p4">
  5187.  
  5188. </page>
  5189. <page pagename="Exercise 2.6">
  5190. <b>Exercise 2.6</b><br>
  5191. Determine the values of each variable after the calculation is performed. Assume 
  5192. that when each statement begins executing all variables have the integer value 5.<br>
  5193. <font size=2><br></font><font size=11><pre>
  5194. a)  product *= x++;<p>
  5195. b)  quotient /= ++x;<p>
  5196. </pre></font>
  5197. <foreign  name="answers" url="^Answers::c:s0p6">
  5198.  
  5199. </page>
  5200. <page pagename="Exercise 2.7">
  5201. <b>Exercise 2.7</b><br>
  5202. Write single C++ statements that<br>
  5203. a)  Input integer variable <b>x</b> with <b>cin</b> and <b>>></b>.<br>
  5204. b)  Input integer variable <b>y</b> with <b>cin</b> and <b>>></b>.<br>
  5205. c)  Initialize integer variable <b>i</b> to <b>1</b>.<br>
  5206. d)  Initialize integer variable <b>power</b> to <b>1</b>.<br>
  5207. e)  Multiply variable <b>power</b> by <b>x</b> and assign the result to <b>power</b>.<br>
  5208. f)  Increment variable <b>y</b> by <b>1</b>.<br>
  5209. g)  Test <b>y</b> to see if it is less than or equal to<b> x</b>.<br>
  5210. h)  Output integer variable <b>power</b> with <b>cout</b> and <b><<</b>.<br>
  5211. <foreign  name="answers" url="^Answers::c:s0p7">
  5212.  
  5213. </page>
  5214. <page pagename="Exercise 2.8">
  5215. <b>Exercise 2.8</b><br>
  5216. Write a C++ program that uses the statements in  <a href="^Exercises::c:s0p7"> <img src="bckgrnds/icons/exercise.gif" align=sidebar>Exercise 2.7</a> to calculate<b> x</b> 
  5217. raised to the <b>y</b> power. The program should have a <b>while</b> repetition control 
  5218. structure.<br>
  5219. <foreign  name="answers" url="^Answers::c:s0p8">
  5220.  
  5221. </page>
  5222. <page pagename="Exercise 2.9">
  5223. <b>Exercise 2.9</b><br>
  5224. Identify and correct the errors in each of the following:<br>
  5225. <font size=2><br></font><font size=11><pre>
  5226. a)  while ( c <= 5 ) {<p>
  5227.        product *= c;<p>
  5228.        ++c;<p>
  5229. b)  cin << value;<p>
  5230. c)  if ( gender == 1 )<p>
  5231.            cout << "Woman" << endl;<p>
  5232.      else;<p>
  5233.           cout << "Man" << endl;<p>
  5234. </pre></font>
  5235. <foreign  name="answers" url="^Answers::c:s0p10">
  5236.  
  5237. </page>
  5238. <page pagename="Exercise 2.10">
  5239. <b>Exercise 2.10</b><br>
  5240. What is wrong with the following <b>while</b> repetition structure:<br>
  5241. <font size=2><br></font><font size=11><pre>
  5242.    while ( z >= 0 )<p>
  5243.        sum += z;<p>
  5244. </pre></font>
  5245. <foreign  name="answers" url="^Answers::c:s0p11">
  5246.  
  5247. </page>
  5248. <page pagename="Exercise 2.11">
  5249. <b>Exercise 2.11</b><br>
  5250. State whether the following are true or false. If the answer is false, explain why.<br>
  5251. a)  The <b>default</b> case is required in the <b>switch</b> selection structure.<br>
  5252. b)  The <b>break</b> statement is required in the default case of a <b>switch</b> selection 
  5253. structure to exit the structure properly.<br>
  5254. c)  The expression <b>( x > y && a < b )</b> is <b>true</b> if either the expression <b>x > y</b> is 
  5255. <b>true</b> or the expression <b>a < b</b> is <b>true</b>.<br>
  5256. d)  An expression containing the <b>||</b> operator is <b>true</b> if either or both of its 
  5257. operands is <b>true</b>.<br>
  5258. <foreign  name="answers" url="^Answers::c:s0p12">
  5259.  
  5260. </page>
  5261. <page pagename="Exercise 2.12">
  5262. <b>Exercise 2.12</b><br>
  5263. Write a C++ statement or a set of C++ statements to accomplish each of the 
  5264. following:<br>
  5265. a)  Sum the odd integers between 1 and 99 using a <b>for</b> structure. Assume the 
  5266. integer variables <b>sum</b> and <b>count</b> have been declared. <br>
  5267. b)  Print the value <b>333.546372</b> in a field width of <b>15</b> characters with precisions 
  5268. of <b>1</b>, <b>2</b>, and <b>3</b>. Print each number on the same line. Left justify each number in its 
  5269. field. What three values print?<br>
  5270. c)  Calculate the value of <b>2.5</b> raised to the power of <b>3</b> using the <b>pow</b> function. 
  5271. Print the result with a precision of <b>2</b> in a field width of <b>10</b> positions. What 
  5272. prints?<br>
  5273. <foreign  name="answers" url="^Answers::c:s0p13">
  5274.  
  5275. </page>
  5276. <page pagename="Exercise 2.12">
  5277. d)  Print the integers from 1 to 20 using a <b>while</b> loop and the counter variable <b>x</b>. 
  5278. Assume that the variable <b>x</b> has been declared, but not initialized. Print only 5 
  5279. integers per line. Hint: Use the calculation <b>x % 5</b>. When the value of this is 0, 
  5280. print a newline character, otherwise print a tab character.<br>
  5281. e)  Repeat Exercise 2.12 (d) using a <b>for</b> structure.<br>
  5282. <foreign  name="answers" url="^Answers::c:s0p13">
  5283.  
  5284. </page>
  5285. <page pagename="Exercise 2.13">
  5286. <b>Exercise 2.13</b><br>
  5287. Find the error in each of the following code segments and explain how to correct 
  5288. it.<br>
  5289. <font size=2><br></font><font size=11><pre>
  5290. a)  x = 1;<p>
  5291.     while ( x <= 10 );<p>
  5292.        x++;<p>
  5293.     }<p>
  5294. b)  for ( y = .1; y != 1.0; y += .1 )<p>
  5295.        cout << y << endl;<p>
  5296. c)  switch ( n ) {<p>
  5297.       case 1:<p>
  5298. </pre></font>
  5299. <foreign  name="answers" url="^Answers::c:s0p17">
  5300.  
  5301. </page>
  5302. <page pagename="Exercise 2.13">
  5303. <font size=2><br></font><font size=11><pre>
  5304.         cout << "The number is 1" << endl;<p>
  5305. </pre></font>
  5306. <font size=2><br></font><font size=11><pre>
  5307.       case 2:<p>
  5308.         cout << "The number is 2" << endl;<p>
  5309.         break;<p>
  5310.       default:<p>
  5311.         cout << "The number is not 1 or 2" << endl;<p>
  5312.         break;<p>
  5313.     }<p>
  5314. </pre></font>
  5315. d)  The following code should print the values 1 to 10.<br>
  5316. <font size=2><br></font><font size=11><pre>
  5317.    n = 1;<p>
  5318.    while ( n < 10 ) <p>
  5319.       cout << n++ << endl;<p>
  5320. </pre></font>
  5321. <foreign  name="answers" url="^Answers::c:s0p17">
  5322.  
  5323. </page>
  5324. <page pagename="Exercise 2.14">
  5325. <b>Exercise 2.14</b><br>
  5326. Exercises 2.14 through 2.38 correspond to Sections 2.1 through 2.12.<p>
  5327. Exercises 2.39 through 2.63 correspond to Sections 2.13 through 2.21.<br>
  5328. <br>
  5329. Identify and correct the errors in each of the following (Note: There may be 
  5330. more than one error in each piece of code):<br>
  5331. <font size=2><br></font><font size=11><pre>
  5332. a)  if ( age >= 65 );<p>
  5333.        cout << "Age is greater than or equal to 65" << endl;<p>
  5334.     else<p>
  5335.        cout << "Age is less than 65 << endl";<p>
  5336. </pre></font>
  5337. <foreign  name="answers" url="^Answers::c:s0p19">
  5338.  
  5339. </page>
  5340. <page pagename="Exercise 2.14">
  5341. <font size=2><br></font><font size=11><pre>
  5342. b)  if ( age >= 65 )<p>
  5343. </pre></font>
  5344. <font size=2><br></font><font size=11><pre>
  5345.        cout << "Age is greater than or equal to 65" << endl;<p>
  5346.     else;<p>
  5347.        cout << "Age is less than 65 << endl";<p>
  5348. c)  int x = 1, total;<p>
  5349.     while ( x <= 10 ) {<p>
  5350.        total += x;<p>
  5351.        ++x;<p>
  5352.     }<p>
  5353. d)  While ( x <= 100 )<p>
  5354.        total += x;<p>
  5355.        ++x;<p>
  5356. </pre></font>
  5357. <foreign  name="answers" url="^Answers::c:s0p19">
  5358.  
  5359. </page>
  5360. <page pagename="Exercise 2.14">
  5361. <font size=2><br></font><font size=11><pre>
  5362. e)  while ( y > 0 ) {<p>
  5363. </pre></font>
  5364. <font size=2><br></font><font size=11><pre>
  5365.        cout << y << endl;<p>
  5366.        ++y;<p>
  5367.     }<p>
  5368. </pre></font>
  5369. <foreign  name="answers" url="^Answers::c:s0p19">
  5370. <br>
  5371.  
  5372. </page>
  5373. <page pagename="Exercise 2.15">
  5374. <b>Exercise 2.15</b><br>
  5375. What does the following program print?<br>
  5376. <font size=2><br></font><font size=11><pre>
  5377. #include <iostream.h><p>
  5378. int main()<p>
  5379. {<p>
  5380.    int y, x = 1, total = 0;<p>
  5381.    while (x <= 10) {<p>
  5382.       y = x * x;<p>
  5383.       cout << y << endl;<p>
  5384.       total += y;<p>
  5385.       ++x;<p>
  5386.    }<p>
  5387. </pre></font>
  5388.  
  5389. </page>
  5390. <page pagename="Exercise 2.15">
  5391. <font size=2><br></font><font size=11><pre>
  5392.    cout << "Total is " << total << endl;<p>
  5393. </pre></font>
  5394. <font size=2><br></font><font size=11><pre>
  5395.    return 0;<p>
  5396. }<p>
  5397. </pre></font>
  5398.  
  5399. </page>
  5400. <page pagename="Exercise 2.15">
  5401. <font size=18>For Exercises 2.16 to 2.19 perform each of these steps:</font><br>
  5402. a)  Read the problem statement.<br>
  5403. b)  Formulate the algorithm using pseudocode and top-down, stepwise 
  5404. refinement.<br>
  5405. c)  Write a C++ program.<br>
  5406. d)  Test, debug, and execute the C++ program.<br>
  5407. <br>
  5408.  
  5409. </page>
  5410. <page pagename="Exercise 2.16">
  5411. <b>Exercise 2.16</b><br>
  5412. Drivers are concerned with the mileage obtained by their automobiles. One 
  5413. driver has kept track of several tankfuls of gasoline by recording miles driven 
  5414. and gallons used for each tankful. Develop a C++ program that will input the 
  5415. miles driven and gallons used for each tankful. The program should calculate 
  5416. and display the miles per gallon obtained for each tankful. After processing all 
  5417. input information, the program should calculate and print the combined miles 
  5418. per gallon obtained for all tankfuls.<br>
  5419. <hr>
  5420. <font size=2><br></font><font size=11><pre>
  5421. Enter the gallons used (-1 to end): 12.8<p>
  5422. Enter the miles driven: 287<p>
  5423. The miles / gallon for this tank was 22.421875<p>
  5424. </pre></font>
  5425. <foreign  name="answers" url="^Answers::c:s0p23">
  5426.  
  5427. </page>
  5428. <page pagename="Exercise 2.16">
  5429. <font size=2><br></font><font size=11><pre>
  5430. Enter the gallons used (-1 to end): 10.3<p>
  5431. </pre></font>
  5432. <font size=2><br></font><font size=11><pre>
  5433. Enter the miles driven: 200<p>
  5434. The miles / gallon for this tank was 19.417475<p>
  5435. <p>
  5436. Enter the gallons used (-1 to end): 5<p>
  5437. Enter the miles driven: 120<p>
  5438. The miles / gallon for this tank was 24.000000<p>
  5439. <p>
  5440. Enter the gallons used (-1 to end): -1<p>
  5441. <p>
  5442. The overall average miles/gallon was 21.601423<p>
  5443. </pre></font>
  5444. <hr>
  5445. <foreign  name="answers" url="^Answers::c:s0p23">
  5446.  
  5447. </page>
  5448. <page pagename="Exercise 2.17">
  5449. <b>Exercise 2.17</b><br>
  5450. Develop a C++ program that will determine if a department store customer has 
  5451. exceeded the credit limit on a charge account. For each customer, the following 
  5452. facts are available:<br>
  5453. a)  Account number (an integer)<br>
  5454. b)  Balance at the beginning of the month<br>
  5455. c)  Total of all items charged by this customer this month<br>
  5456. d)  Total of all credits applied to this customer's account this month<br>
  5457. e)  Allowed credit limit<br>
  5458. The program should input each of these facts, calculate the new balance (= 
  5459. beginning balance + charges - credits), and determine if the new balance exceeds 
  5460. the customer's credit limit. For those customers whose credit limit is exceeded, <br>
  5461.  
  5462. </page>
  5463. <page pagename="Exercise 2.17">
  5464. the program should display the customer's account number, credit limit, new 
  5465. balance, and the message "Credit limit exceeded."<br>
  5466. <hr>
  5467. <font size=2><br></font><font size=11><pre>
  5468. Enter account number (-1 to end): 100<p>
  5469. Enter beginning balance: 5394.78<p>
  5470. Enter total charges: 1000.00<p>
  5471. Enter total credits: 500.00<p>
  5472. Enter credit limit: 5500.00<p>
  5473. Account:      100<p>
  5474. Credit limit: 5500.00<p>
  5475. Balance:      5894.78<p>
  5476. Credit Limit Exceeded.<p>
  5477. <p>
  5478. </pre></font>
  5479.  
  5480. </page>
  5481. <page pagename="Exercise 2.17">
  5482. <font size=2><br></font><font size=11><pre>
  5483. Enter account number (-1 to end): 200<p>
  5484. </pre></font>
  5485. <font size=2><br></font><font size=11><pre>
  5486. Enter beginning balance: 1000.00<p>
  5487. Enter total charges: 123.45<p>
  5488. Enter total credits: 321.00<p>
  5489. Enter credit limit: 1500.00<p>
  5490. <p>
  5491. Enter account number (-1 to end): 300<p>
  5492. Enter beginning balance: 500.00<p>
  5493. Enter total charges: 274.73<p>
  5494. Enter total credits: 100.00<p>
  5495. Enter credit limit: 800.00<p>
  5496. <p>
  5497. Enter account number (-1 to end): -1<p>
  5498. </pre></font>
  5499. <hr>
  5500.  
  5501. </page>
  5502. <page pagename="Exercise 2.18">
  5503. <b>Exercise 2.18</b><br>
  5504. One large chemical company pays its salespeople on a commission basis. The 
  5505. salespeople receive $200 per week plus 9 percent of their gross sales for that 
  5506. week. For example, a salesperson who sells $5000 worth of chemicals in a week 
  5507. receives $200 plus 9 percent of $5000, or a total of $650. Develop a C++ 
  5508. program that will input each salesperson's gross sales for last week and calculate 
  5509. and display that salesperson's earnings. Process one salesperson's figures at a 
  5510. time.<br>
  5511. <hr>
  5512. <font size=2><br></font><font size=11><pre>
  5513. Enter sales in dollars (-1 to end): 5000.00<p>
  5514. Salary is: $650.00<p>
  5515. <p>
  5516. </pre></font>
  5517. <foreign  name="answers" url="^Answers::c:s0p24">
  5518.  
  5519. </page>
  5520. <page pagename="Exercise 2.18">
  5521. <font size=2><br></font><font size=11><pre>
  5522. Enter sales in dollars (-1 to end): 6000.00<p>
  5523. </pre></font>
  5524. <font size=2><br></font><font size=11><pre>
  5525. Salary is: $740.00<p>
  5526. <p>
  5527. Enter sales in dollars (-1 to end): 7000.00<p>
  5528. Salary is: $830.00<p>
  5529. <p>
  5530. Enter sales in dollars (-1 to end): -1<p>
  5531. </pre></font>
  5532. <hr>
  5533. <foreign  name="answers" url="^Answers::c:s0p24">
  5534. <br>
  5535.  
  5536. </page>
  5537. <page pagename="Exercise 2.19">
  5538. <b>Exercise 2.19</b><br>
  5539. Develop a C++ program that will determine the gross pay for each of several 
  5540. employees. The company pays "straight-time" for the first 40 hours worked by 
  5541. each employee and pays "time-and-a-half" for all hours worked in excess of 40 
  5542. hours. You are given a list of the employees of the company, the number of 
  5543. hours each employee worked last week, and the hourly rate of each employee. 
  5544. Your program should input this information for each employee, and should 
  5545. determine and display the employee's gross pay.<br>
  5546. <hr>
  5547. <font size=2><br></font><font size=11><pre>
  5548. Enter hours worked (-1 to end): 39<p>
  5549. Enter hourly rate of the worker ($00.00): 10.00<p>
  5550. Salary is $390.00<p>
  5551. <p>
  5552. </pre></font>
  5553.  
  5554. </page>
  5555. <page pagename="Exercise 2.19">
  5556. <font size=2><br></font><font size=11><pre>
  5557. Enter hours worked (-1 to end): 40<p>
  5558. </pre></font>
  5559. <font size=2><br></font><font size=11><pre>
  5560. Enter hourly rate of the worker ($00.00): 10.00<p>
  5561. Salary is $400.00<p>
  5562. <p>
  5563. Enter hours worked (-1 to end): 41<p>
  5564. Enter hourly rate of the worker ($00.00): 10.00<p>
  5565. Salary is $415.00<p>
  5566. <p>
  5567. Enter hours worked (-1 to end): -1<p>
  5568. </pre></font>
  5569. <hr>
  5570.  
  5571. </page>
  5572. <page pagename="Exercise 2.20">
  5573. <b>Exercise 2.20</b><br>
  5574. The process of finding the largest number (i.e., the maximum of a group of 
  5575. numbers) is used frequently in computer applications. For example, a program 
  5576. that determines the winner of a sales contest would input the number of units 
  5577. sold by each salesperson. The salesperson who sells the most units wins the 
  5578. contest. Write a pseudocode program and then a C++ program that inputs a 
  5579. series of 10 numbers, and determines and prints the largest of the numbers. Hint: 
  5580. Your program should use three variables as follows:<br>
  5581. <b>counter:</b>  A counter to count to 10 (i.e., to keep track of how many numbers 
  5582. have been input, and to determine when all 10 numbers have been processed).<br>
  5583. <b>number:</b>  The current number input to the program.<br>
  5584. <b>largest:</b>  The largest number found so far.<br>
  5585. <foreign  name="answers" url="^Answers::c:s0p25">
  5586.  
  5587. </page>
  5588. <page pagename="Exercise 2.21">
  5589. <b>Exercise 2.21</b><br>
  5590. Write a C++ program that utilizes looping and the tab escape sequence <b>\ </b> to print 
  5591. the following table of values:<br>
  5592. <hr>
  5593. <font size=2><br></font><font size=11><pre>
  5594. N       10*N    100*N   1000*N<spacer width=20 height=1> <p>
  5595. <p>
  5596. 1       10      100     1000<p>
  5597. 2       20      200     2000<p>
  5598. 3       30      300     3000<p>
  5599. 4       40      400     4000<p>
  5600. 5       50      500     5000<p>
  5601. </pre></font>
  5602. <hr>
  5603.  
  5604. </page>
  5605. <page pagename="Exercise 2.22">
  5606. <b>Exercise 2.22</b><br>
  5607. Using an approach similar to<a href="^Exercises::c:s0p31"> <img src="bckgrnds/icons/exercise.gif" align=sidebar>Exercise 2.20</a>, find the <i>two</i> largest values of the 10 
  5608. numbers. Note: You may input each number only once.<br>
  5609.  
  5610. </page>
  5611. <page pagename="Exercise 2.23">
  5612. <b>Exercise 2.23</b><br>
  5613. Modify the program in <a href="^Code::c:s0p2"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.11</a> to validate its inputs. On any input, if the value 
  5614. entered is other than 1 or 2, keep looping until the user enters a correct value.<br>
  5615.  
  5616. </page>
  5617. <page pagename="Exercise 2.24">
  5618. <b>Exercise 2.24</b><br>
  5619. What does the following program print?<br>
  5620. <font size=2><br></font><font size=11><pre>
  5621. #include <iostream.h><p>
  5622. int main()<p>
  5623. {<p>
  5624.    int count = 1;<p>
  5625.    while ( count <= 10 ) {<p>
  5626.       cout << ( count % 2 ? "****" : "++++++++" )<p>
  5627.            << endl;<p>
  5628.       ++count;<p>
  5629.    }<p>
  5630.    return 0;<p>
  5631. }<p>
  5632. </pre></font>
  5633. <foreign  name="answers" url="^Answers::c:s0p20">
  5634.  
  5635. </page>
  5636. <page pagename="Exercise 2.25">
  5637. <b>Exercise 2.25</b><br>
  5638. What does the following program print?<br>
  5639. <font size=2><br></font><font size=11><pre>
  5640. #include <iostream.h><p>
  5641. int main()<p>
  5642. {<p>
  5643.    int row = 10, column;<p>
  5644.    while ( row >= 1 ) {<p>
  5645.       column = 1;<p>
  5646.       while ( column <= 10 ) {<p>
  5647.          cout << ( row % 2 ? "<" : ">" );<p>
  5648.          ++column;<p>
  5649.       }<p>
  5650. </pre></font>
  5651.  
  5652. </page>
  5653. <page pagename="Exercise 2.25">
  5654. <font size=2><br></font><font size=11><pre>
  5655.       --row;<p>
  5656. </pre></font>
  5657. <font size=2><br></font><font size=11><pre>
  5658.       cout << endl;<p>
  5659.    }<p>
  5660.    return 0;<p>
  5661. }<p>
  5662. </pre></font>
  5663.  
  5664. </page>
  5665. <page pagename="Exercise 2.26">
  5666. <b>Exercise 2.26</b><br>
  5667. (<i>Dangling Else Problem</i>) Determine the output for each of the following when <b>x</b> 
  5668. is <b>9</b> and <b>y</b> is <b>11</b> and when <b>x</b> is <b>11</b> and <b>y</b> is <b>9</b>. Note that the compiler ignores the 
  5669. indentation in a C++ program. Also, the C++ compiler always associates an <b>else</b> 
  5670. with the previous <b>if</b> unless told to do otherwise by the placement of braces <b>{}</b>. 
  5671. Because, on first glance, the programmer may not be sure which <b>if</b> an else 
  5672. matches, this is referred to as the "dangling else" problem. We have eliminated 
  5673. the indentation from the following code to make the problem more challenging. 
  5674. (Hint: Apply indentation conventions you have learned.)<br>
  5675. <font size=2><br></font><font size=11><pre>
  5676. a)  if ( x < 10 )<p>
  5677.     if ( y > 10 )<p>
  5678.     cout << "*****" << endl;<p>
  5679. </pre></font>
  5680. <foreign  name="answers" url="^Answers::c:s0p21">
  5681.  
  5682. </page>
  5683. <page pagename="Exercise 2.26">
  5684. <font size=2><br></font><font size=11><pre>
  5685.     else<p>
  5686. </pre></font>
  5687. <font size=2><br></font><font size=11><pre>
  5688.     cout << "#####" << endl;<p>
  5689.     cout << "$$$$$" << endl;<p>
  5690. b)  if ( x < 10 ) {<p>
  5691.     if ( y > 10 )<p>
  5692.     cout << "*****" << endl;  <p>
  5693.     }<p>
  5694.     else {<p>
  5695.     cout << "#####" << endl;<p>
  5696.     cout << "$$$$$" << endl;<p>
  5697.     }<p>
  5698. </pre></font>
  5699. <foreign  name="answers" url="^Answers::c:s0p21">
  5700.  
  5701. </page>
  5702. <page pagename="Exercise 2.27">
  5703. <b>Exercise 2.27</b><br>
  5704. (<i>Another Dangling Else Problem</i>) Modify the following code to produce the 
  5705. output shown. Use proper indentation techniques. You may not make any 
  5706. changes other than inserting braces. The compiler ignores indentation in a C++ 
  5707. program. We have eliminated the indentation from the following code to make 
  5708. the problem more challenging. Note: It is possible that no modification is 
  5709. necessary.<br>
  5710. <font size=2><br></font><font size=11><pre>
  5711. if ( y == 8 )<p>
  5712. if ( x == 5 )<p>
  5713. cout << "@@@@@" << endl;<p>
  5714. else<p>
  5715. cout << "#####" << endl;<p>
  5716. </pre></font>
  5717.  
  5718. </page>
  5719. <page pagename="Exercise 2.27">
  5720. <font size=2><br></font><font size=11><pre>
  5721. cout << "$$$$$" << endl;<p>
  5722. </pre></font>
  5723. <font size=2><br></font><font size=11><pre>
  5724. cout << "&&&&&" << endl;<p>
  5725. </pre></font>
  5726. a)  Assuming <b>x = 5</b> and <b>y = 8</b>, the following output is produced.<br>
  5727. <hr>
  5728. <font size=2><br></font><font size=11><pre>
  5729. @@@@@<p>
  5730. $$$$$<p>
  5731. &&&&&<p>
  5732. </pre></font>
  5733. <hr>
  5734. b)  Assuming <b>x = 5</b> and <b>y = 8</b>, the following output is produced.<br>
  5735. <hr>
  5736. <font size=2><br></font><font size=11><pre>
  5737. @@@@@<p>
  5738. </pre></font>
  5739. <hr>
  5740.  
  5741. </page>
  5742. <page pagename="Exercise 2.27">
  5743. c)  Assuming <b>x = 5</b> and <b>y = 8</b>, the following output is produced.<br>
  5744. <hr>
  5745. <font size=2><br></font><font size=11><pre>
  5746. @@@@@<p>
  5747. &&&&&<p>
  5748. </pre></font>
  5749. <hr>
  5750. d)  Assuming <b>x = 5</b> and <b>y = 7</b>, the following output is produced. Note: The last 
  5751. three output statements after the else are all part of a compound statement.<br>
  5752. <hr>
  5753. <font size=2><br></font><font size=11><pre>
  5754. #####<p>
  5755. $$$$$<p>
  5756. &&&&&<p>
  5757. </pre></font>
  5758. <hr>
  5759.  
  5760. </page>
  5761. <page pagename="Exercise 2.28">
  5762. <b>Exercise 2.28</b><br>
  5763. Write a program that reads in the size of the side of a square and then prints a 
  5764. hollow square of that size out of asterisks and blanks. Your program should 
  5765. work for squares of all side sizes between 1 and 20. For example, if your 
  5766. program reads a size of 5, it should print<br>
  5767. <hr>
  5768. <font size=2><br></font><font size=11><pre>
  5769. *****<p>
  5770. *   *<p>
  5771. *   *<p>
  5772. *   *<p>
  5773. *****<p>
  5774. </pre></font>
  5775. <hr>
  5776.  
  5777. </page>
  5778. <page pagename="Exercise 2.29">
  5779. <b>Exercise 2.29</b><br>
  5780. A palindrome is a number or a text phrase that reads the same backwards as 
  5781. forwards. For example, each of the following five-digit integers are 
  5782. palindromes: 12321, 55555, 45554 and 11611. Write a program that reads in a 
  5783. five-digit integer and determines whether or not it is a palindrome. (Hint: Use 
  5784. the division and modulus operators to separate the number into its individual 
  5785. digits.)<br>
  5786. <foreign  name="answers" url="^Answers::c:s0p26">
  5787. <br>
  5788.  
  5789. </page>
  5790. <page pagename="Exercise 2.30">
  5791. <b>Exercise 2.30</b><br>
  5792. Input an integer containing only 0s and 1s (i.e., a "binary" integer) and print its 
  5793. decimal equivalent. (Hint: Use the modulus and division operators to pick off 
  5794. the "binary" number's digits one at a time from right to left. Just as in the 
  5795. decimal number system where the rightmost digit has a positional value of 1, 
  5796. and the next digit left has a positional value of 10, then 100, then 1000, etc., in 
  5797. the binary number system the rightmost digit has a positional value of 1, the next 
  5798. digit left has a positional value of 2, then 4, then 8, etc. Thus the decimal number 
  5799. 234 can be interpreted as 4 * 1 + 3 * 10 + 2 * 100. The decimal equivalent of 
  5800. binary 1101 is 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 or 1 + 0 + 4 + 8 or 13.)<br>
  5801.  
  5802. </page>
  5803. <page pagename="Exercise 2.31">
  5804. <b>Exercise 2.31</b><br>
  5805. Write a program that displays the following checkerboard pattern<br>
  5806. <hr>
  5807. <font size=2><br></font><font size=11><pre>
  5808. * * * * * * * *<p>
  5809.  * * * * * * * *<p>
  5810. * * * * * * * *<p>
  5811.  * * * * * * * *<p>
  5812. * * * * * * * *<p>
  5813.  * * * * * * * *<p>
  5814. * * * * * * * *<p>
  5815.  * * * * * * * *<p>
  5816. </pre></font>
  5817. <hr>
  5818. <foreign  name="answers" url="^Answers::c:s0p27">
  5819.  
  5820. </page>
  5821. <page pagename="Exercise 2.31">
  5822. Your program may use only three output statements, one of each of the 
  5823. following forms:<br>
  5824. <font size=2><br></font><font size=11><pre>
  5825. cout << "* "; <p>
  5826. cout << ' ';<p>
  5827. cout << endl;<p>
  5828. </pre></font>
  5829. <foreign  name="answers" url="^Answers::c:s0p27">
  5830. <br>
  5831.  
  5832. </page>
  5833. <page pagename="Exercise 2.32">
  5834. <b>Exercise 2.32</b><br>
  5835. Write a program that keeps printing the multiples of the integer 2, namely 2, 4, 8, 
  5836. 16, 32, 64, etc. Your loop should not terminate (i.e., you should create an infinite 
  5837. loop). What happens when you run this program? <br>
  5838.  
  5839. </page>
  5840. <page pagename="Exercise 2.33">
  5841. <b>Exercise 2.33</b><br>
  5842. Write a program that reads the radius of a circle (as a <b>float</b> value) and computes 
  5843. and prints the diameter, the circumference, and the area. Use the value 3.14159 
  5844. for <i>pi</i>.<br>
  5845. <foreign  name="answers" url="^Answers::c:s0p28">
  5846. <br>
  5847.  
  5848. </page>
  5849. <page pagename="Exercise 2.34">
  5850. <b>Exercise 2.34</b><br>
  5851. What's wrong with the following statement? Provide the correct statement to 
  5852. accomplish what the programmer was probably trying to do.<br>
  5853. <font size=2><br></font><font size=11><pre>
  5854. cout << ++( x + y );<p>
  5855. </pre></font>
  5856.  
  5857. </page>
  5858. <page pagename="Exercise 2.35">
  5859. <b>Exercise 2.35</b><br>
  5860. Write a program that reads three nonzero <b>float</b> values and determines and prints 
  5861. if they could represent the sides of a triangle.<br>
  5862.  
  5863. </page>
  5864. <page pagename="Exercise 2.36">
  5865. <b>Exercise 2.36</b><br>
  5866. Write a program that reads three nonzero integers and determines and prints if 
  5867. they could be the sides of a right triangle.<br>
  5868.  
  5869. </page>
  5870. <page pagename="Exercise 2.37">
  5871. <b>Exercise 2.37</b><br>
  5872. A company wants to transmit data over the telephone, but they are concerned 
  5873. that their phones may be tapped. All of their data is transmitted as four-digit 
  5874. integers. They have asked you to write a program that encrypts their data so that 
  5875. it may be transmitted more securely. Your program should read a four-digit 
  5876. integer and encrypt it as follows: Replace each digit by (<i>the sum of that digit 
  5877. plus 7</i>) <i>modulus 10</i>. Then, swap the first digit with the third, swap the second 
  5878. digit with the fourth, and print the encrypted integer. Write a separate program 
  5879. that inputs an encrypted four-digit integer, and decrypts it to form the original 
  5880. number.<br>
  5881. <foreign  name="answers" url="^Answers::c:s0p29">
  5882. <br>
  5883.  
  5884. </page>
  5885. <page pagename="Exercise 2.38">
  5886. <b>Exercise 2.38</b><br>
  5887. The factorial of a nonnegative integer <i>n</i> is written n! (pronounced "<i>n</i> factorial") 
  5888. and is defined as follows:<br>
  5889.      <i>n</i>! = <i>n</i> x (<i>n</i> - 1) x (<i>n </i>- 2) x ... x 1   (for values of <i>n</i> greater than or equal to 1)<br>
  5890. and<br>
  5891.      <i>n</i>! = 1   (for <i>n </i>= 0).<br>
  5892. For example, 5! = 5 x 4 x 3 x 2 x 1 which is 120. <br>
  5893. a)  Write a program that reads a nonnegative integer and computes and prints its 
  5894. factorial.<br>
  5895. b)  Write a program that estimates the value of the mathematical constant <i>e</i> by 
  5896. using the formula: <br>
  5897.  
  5898. </page>
  5899. <page pagename="Exercise 2.38">
  5900. <img src="graphics/ch02/ex0238a.gif" ><br>
  5901. c)  Write a program that computes the value of <img src="graphics/ch02/ex0238b.gif" > by using the formula <br>
  5902. <font size=2><br></font><font size=11><pre>
  5903. <img src="graphics/ch02/ex0238c.gif" ><p>
  5904. </pre></font>
  5905.  
  5906. </page>
  5907. <page pagename="Exercise 2.39">
  5908. <b>Exercise 2.39</b><br>
  5909. Find the error in each of the following (Note: There may be more than one 
  5910. error):<br>
  5911. <font size=2><br></font><font size=11><pre>
  5912. a)  For ( x = 100, x >= 1, x++ )<p>
  5913.        cout << x << endl;<p>
  5914. </pre></font>
  5915. b)  The following code should print whether integer <b>value</b> is odd or even:<br>
  5916. <font size=2><br></font><font size=11><pre>
  5917.     switch ( value % 2 ) {<p>
  5918.        case 0:<p>
  5919.           cout << "Even integer" << endl;<p>
  5920.        case 1:<p>
  5921.           cout << "Odd integer" << endl;<p>
  5922.     }<p>
  5923. </pre></font>
  5924.  
  5925. </page>
  5926. <page pagename="Exercise 2.39">
  5927. c)  The following code should output the odd integers from 19 to 1:<br>
  5928. <font size=2><br></font><font size=11><pre>
  5929.     for ( x = 19; x >= 1; x += 2 )<p>
  5930.        cout << x << endl;<p>
  5931. </pre></font>
  5932. d)  The following code should output the even integers from 2 to 100:<br>
  5933. <font size=2><br></font><font size=11><pre>
  5934.     counter = 2;<p>
  5935.     do {<p>
  5936.        cout << counter << endl;<p>
  5937.        counter += 2;<p>
  5938.     } While ( counter < 100 );<p>
  5939. </pre></font>
  5940. <br>
  5941.  
  5942. </page>
  5943. <page pagename="Exercise 2.40">
  5944. <b>Exercise 2.40</b><br>
  5945. Write a program that sums a sequence of integers. Assume that the first integer 
  5946. read specifies the number of values remaining to be entered. Your program 
  5947. should read only one value per input statement. A typical input sequence might 
  5948. be <br>
  5949. <font size=2><br></font><font size=11><pre>
  5950. 5 100 200 300 400 500<p>
  5951. </pre></font>
  5952. where the <b>5</b> indicates that the subsequent <b>5</b> values are to be summed.<br>
  5953. <foreign  name="answers" url="^Answers::c:s0p30">
  5954. <br>
  5955.  
  5956. </page>
  5957. <page pagename="Exercise 2.41">
  5958. <b>Exercise 2.41</b><br>
  5959. Write a program that calculates and prints the average of several integers. 
  5960. Assume the last value read is the sentinel <b>9999</b>. A typical input sequence might 
  5961. be<br>
  5962. <font size=2><br></font><font size=11><pre>
  5963. 10 8 11 7 9 9999<p>
  5964. </pre></font>
  5965. indicating that the average of all the values preceding <b>9999</b> is to be calculated.<br>
  5966. <br>
  5967. <br>
  5968.  
  5969. </page>
  5970. <page pagename="Exercise 2.42">
  5971. <b>Exercise 2.42</b><br>
  5972. What does the following program do?<br>
  5973. <font size=2><br></font><font size=11><pre>
  5974. #include <iostream.h><p>
  5975. int main()<p>
  5976. {<p>
  5977.    int x, y;<p>
  5978.    cout << "Enter two integers in the range 1-20: ";<p>
  5979.    cin >> x >> y;<p>
  5980.    for ( int i = 1; i <= y; i++ ) {<p>
  5981.       for ( int j = 1; j <= x; j++ )<p>
  5982.          cout << '@';<p>
  5983.       cout << endl;<p>
  5984. </pre></font>
  5985.  
  5986. </page>
  5987. <page pagename="Exercise 2.42">
  5988. <font size=2><br></font><font size=11><pre>
  5989.    }<p>
  5990. </pre></font>
  5991. <font size=2><br></font><font size=11><pre>
  5992.    return 0;<p>
  5993. }<p>
  5994. </pre></font>
  5995. <br>
  5996. <br>
  5997.  
  5998. </page>
  5999. <page pagename="Exercise 2.43">
  6000. <b>Exercise 2.43</b><br>
  6001. Write a program that finds the smallest of several integers. Assume that the first 
  6002. value read specifies the number of values remaining.<br>
  6003. <br>
  6004. <foreign  name="answers" url="^Answers::c:s0p31">
  6005. <br>
  6006.  
  6007. </page>
  6008. <page pagename="Exercise 2.44">
  6009. <b>Exercise 2.44</b><br>
  6010. Write a program that calculates and prints the product of the odd integers from 1 
  6011. to 15.<br>
  6012. <br>
  6013. <br>
  6014.  
  6015. </page>
  6016. <page pagename="Exercise 2.45">
  6017. <b>Exercise 2.45</b><br>
  6018. The <i>factorial</i> function is used frequently in probability problems. The factorial 
  6019. of a positive integer <i>n</i> (written <i>n!</i> and pronounced "n factorial") is equal to the 
  6020. product of the positive integers from 1 to <i>n</i>. Write a program that evaluates the 
  6021. factorials of the integers from 1 to 5. Print the results in tabular format. What 
  6022. difficulty might prevent you from calculating the factorial of 20?<br>
  6023. <br>
  6024. <foreign  name="answers" url="^Answers::c:s0p32">
  6025. <br>
  6026.  
  6027. </page>
  6028. <page pagename="Exercise 2.46">
  6029. <b>Exercise 2.46</b><br>
  6030. Modify the compound interest program of<a href="^Illustration::c:s0p13"> Section 2.15</a> to repeat its steps for 
  6031. interest rates of 5 percent, 6 percent, 7 percent, 8 percent, 9 percent, and 10 
  6032. percent. Use a <b>for</b> loop to vary the interest rate.<br>
  6033. <br>
  6034.  
  6035. </page>
  6036. <page pagename="Exercise 2.47">
  6037. <b>Exercise 2.47</b><br>
  6038. Write a program that prints the following patterns separately one below the 
  6039. other. Use <b>for</b> loops to generate the patterns. All asterisks (<b>*</b>) should be printed 
  6040. by a single statement of the form <b>cout << '*';</b> (this causes the asterisks to print 
  6041. side by side). Hint: The last two patterns require that each line begin with an 
  6042. appropriate number of blanks. Extra credit: Combine your code from the four 
  6043. separate problems into a single program that prints all four patterns side by side 
  6044. making clever use of nested <b>for</b> loops.<br>
  6045.  
  6046. </page>
  6047. <page pagename="Exercise 2.47">
  6048. <hr>
  6049. <font size=2><br></font><font size=11><pre>
  6050. (A)            (B)            (C)            (D)<p>
  6051. *              **********     **********              *<p>
  6052. **             *********       *********             **<p>
  6053. ***            ********         ********            ***<p>
  6054. ****           *******           *******           ****<p>
  6055. *****          ******             ******          *****<p>
  6056. ******         *****               *****         ******<p>
  6057. *******        ****                 ****        *******<p>
  6058. ********       ***                   ***       ********<p>
  6059. *********      **                     **      *********<p>
  6060. **********     *                       *     **********<p>
  6061. </pre></font>
  6062. <hr>
  6063.  
  6064. </page>
  6065. <page pagename="Exercise 2.48">
  6066. <b>Exercise 2.48</b><br>
  6067. One interesting application of computers is drawing graphs and bar charts 
  6068. (sometimes called "histograms"). Write a program that reads five numbers (each 
  6069. between 1 and 30). For each number read, your program should print a line 
  6070. containing that number of adjacent asterisks. For example, if your program reads 
  6071. the number seven, it should print <b>*******</b>.<br>
  6072. <br>
  6073. <foreign  name="answers" url="^Answers::c:s0p33">
  6074. <br>
  6075.  
  6076. </page>
  6077. <page pagename="Exercise 2.49">
  6078. <b>Exercise 2.49</b><br>
  6079. A mail order house sells five different products whose retail prices are product 1 
  6080. -- $2.98, product 2--$4.50, product 3--$9.98, product 4--$4.49, and product 
  6081. 5--$6.87. Write a program that reads a series of pairs of numbers as follows:<br>
  6082. a)  Product number<br>
  6083. b)  Quantity sold for one day<br>
  6084. Your program should use a <b>switch</b> statement to help determine the retail price 
  6085. for each product. Your program should calculate and display the total retail 
  6086. value of all products sold last week.<br>
  6087. <br>
  6088. <foreign  name="answers" url="^Answers::c:s0p34">
  6089. <br>
  6090.  
  6091. </page>
  6092. <page pagename="Exercise 2.50">
  6093. <b>Exercise 2.50</b><br>
  6094. Modify the program of<a href="^Code::c:s0p8">  <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.22</a> so that it calculates the grade point average for 
  6095. the class. A grade of 'A' is worth 4 points, 'B' is worth 3 points, etc.<br>
  6096. <br>
  6097. <br>
  6098.  
  6099. </page>
  6100. <page pagename="Exercise 2.51">
  6101. <b>Exercise 2.51</b><br>
  6102. Modify the program in  <a href="^Code::c:s0p7"><img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.21</a> so it uses only integers to calculate the 
  6103. compound interest. (Hint: Treat all monetary amounts as integral numbers of 
  6104. pennies. Then "break" the result into its dollar portion and cents portion by using 
  6105. the division and modulus operations. Insert a period.)<br>
  6106. <br>
  6107. <br>
  6108.  
  6109. </page>
  6110. <page pagename="Exercise 2.52">
  6111. <b>Exercise 2.52</b><br>
  6112. Assume <b>i = 1</b>, j = 2, <b>k = 3</b>, and <b>m = 2</b>. What does each of the following 
  6113. statements print? Are the parentheses necessary in each case?<br>
  6114. <font size=2><br></font><font size=11><pre>
  6115. a)  cout << ( i == 1 ) << endl;<p>
  6116. b)  cout << ( j == 3 ) << endl;<p>
  6117. c)  cout << ( i >= 1 && j < 4 ) << endl;<p>
  6118. d)  cout << ( m <= 99 && k < m ) << endl;<p>
  6119. e)  cout << ( j >= i || k == m ) << endl;<p>
  6120. f)  cout << ( k + m < j || 3 - j >= k ) << endl;<p>
  6121. g)  cout << ( !m ) << endl;<p>
  6122. h)  cout << ( !( j - m ) ) << endl;<p>
  6123. i)  cout << ( !( k > m ) ) << endl;<p>
  6124. </pre></font>
  6125.  
  6126. </page>
  6127. <page pagename="Exercise 2.53">
  6128. <b>Exercise 2.53</b><br>
  6129. Write a program that prints a table of the binary, octal, and hexadecimal 
  6130. equivalents of the decimal numbers in the range 1 through 256. If you are not 
  6131. familiar with these number systems, read Appendix E first. <br>
  6132. <br>
  6133. <br>
  6134.  
  6135. </page>
  6136. <page pagename="Exercise 2.54">
  6137. <b>Exercise 2.54</b><br>
  6138. Calculate the value of <i>pi</i> from the infinite series <br>
  6139. <font size=2><br></font><font size=11><pre>
  6140. <img src="graphics/ch02/ex0254a.gif" ><p>
  6141. </pre></font>
  6142. Print a table that shows the value of <i>pi</i> approximated by 1 term of this series, by 
  6143. two terms, by three terms, etc. How many terms of this series do you have to use 
  6144. before you first get 3.14? 3.141? 3.1415? 3.14159?<br>
  6145. <foreign  name="answers" url="^Answers::c:s0p35">
  6146. <br>
  6147.  
  6148. </page>
  6149. <page pagename="Exercise 2.55">
  6150. <b>Exercise 2.55</b><br>
  6151. (<i>Pythagorean Triples</i>) A right triangle can have sides that are all integers. The 
  6152. set of three integer values for the sides of a right triangle is called a Pythagorean 
  6153. triple. These three sides must satisfy the relationship that the sum of the squares 
  6154. of two of the sides is equal to the square of the hypotenuse. Find all Pythagorean 
  6155. triples for <b>side1</b>, <b>side2</b>, and the <b>hypotenuse</b> all no larger than 500. Use a triple-
  6156. nested <b>for</b>-loop that tries all possibilities. This is an example of "brute force" 
  6157. computing. You will learn in more advanced computer science courses that there 
  6158. are many interesting problems for which there is no known algorithmic 
  6159. approach other than using sheer brute force.  <br>
  6160.  
  6161. </page>
  6162. <page pagename="Exercise 2.56">
  6163. <b>Exercise 2.56</b><br>
  6164. A company pays its employees as managers (who receive a fixed weekly salary), 
  6165. hourly workers (who receive a fixed hourly wage for up to the first 40 hours they 
  6166. work and "time-and-a-half," i.e., 1.5 times their hourly wage, for overtime hours 
  6167. worked), commission workers (who receive $250 plus 5.7% of their gross 
  6168. weekly sales), or pieceworkers (who receive a fixed amount of money per item 
  6169. for each of the items they produce--each pieceworker in this company works on 
  6170. only one type of item). Write a program to compute the weekly pay for each 
  6171. employee. You do not know the number of employees in advance. Each type of 
  6172. employee has its own pay code: Managers have paycode 1, hourly workers have 
  6173. code 2, commission workers have code 3 and pieceworkers have code 4. Use a 
  6174. <b>switch</b> to compute each employee's pay based on that employee's paycode. <br>
  6175.  
  6176. </page>
  6177. <page pagename="Exercise 2.56">
  6178. Within the <b>switch</b>, prompt the user (i.e., the payroll clerk) to enter the 
  6179. appropriate facts your program needs to calculate each employee's pay based on 
  6180. that employee's paycode.<br>
  6181.  
  6182. </page>
  6183. <page pagename="Exercise 2.57">
  6184. <b>Exercise 2.57</b><br>
  6185. (<i>De Morgan's Laws</i>) In this chapter, we discussed the logical operators <b>&&</b>, <b>||</b>, 
  6186. and <b>!</b>. De Morgan's Laws can sometimes make it more convenient for us to 
  6187. express a logical expression. These laws state that the expression <b>!</b>(<i>condition1</i> 
  6188. <b>&&</b> <i>condition2</i>) is logically equivalent to the expression (<b>!</b><i>condition1</i> <b>||</b> 
  6189. !condition2). Also, the expression <b>!(<i>condition1 || condition2)</i></b> is logically 
  6190. equivalent to the expression (<b>!</b><i>condition1<b> && !</b>condition2</i>). Use De Morgan's 
  6191. Laws to write equivalent expressions for each of the following, and then write a 
  6192. program to show that both the original expression and the new expression in 
  6193. each case are equivalent:<br>
  6194. <font size=2><br></font><font size=11><pre>
  6195. a)  !( x < 5 ) && !( y >= 7 )<p>
  6196. b)  !( a == b ) || !( g != 5 )<p>
  6197. </pre></font>
  6198.  
  6199. </page>
  6200. <page pagename="Exercise 2.57">
  6201. <font size=2><br></font><font size=11><pre>
  6202. c)  !( ( x <= 8 ) && ( y > 4 ) )<p>
  6203. </pre></font>
  6204. <font size=2><br></font><font size=11><pre>
  6205. d)  !( ( i > 4 ) || ( j <= 6 ) )<p>
  6206. </pre></font>
  6207.  
  6208. </page>
  6209. <page pagename="Exercise 2.58">
  6210. <b>Exercise 2.58</b><br>
  6211. Write a program that prints the following diamond shape. You may use output 
  6212. statements that print either a single asterisk (<b>*</b>) or a single blank. Maximize your 
  6213. use of repetition (with nested <b>for</b> structures) and minimize the number of output 
  6214. statements.<br>
  6215. <hr>
  6216. <font size=2><br></font><font size=11><pre>
  6217.     *<p>
  6218.    ***<p>
  6219.   *****<p>
  6220.  *******<p>
  6221. *********<p>
  6222.  *******<p>
  6223. </pre></font>
  6224. <foreign  name="answers" url="^Answers::c:s0p36">
  6225.  
  6226. </page>
  6227. <page pagename="Exercise 2.58">
  6228. <font size=2><br></font><font size=11><pre>
  6229.   *****<p>
  6230. </pre></font>
  6231. <font size=2><br></font><font size=11><pre>
  6232.    ***<p>
  6233.     *<p>
  6234. </pre></font>
  6235. <hr>
  6236. <foreign  name="answers" url="^Answers::c:s0p36">
  6237. <br>
  6238.  
  6239. </page>
  6240. <page pagename="Exercise 2.59">
  6241. <b>Exercise 2.59</b><br>
  6242. Modify the program you wrote in <a href="^Exercises::c:s0p80"><img src="bckgrnds/icons/exercise.gif" align=sidebar>Exercise 2.58</a> to read an odd number in the 
  6243. range 1 to 19 to specify the number of rows in the diamond. Your program 
  6244. should then display a diamond of the appropriate size.<br>
  6245. <br>
  6246. <br>
  6247.  
  6248. </page>
  6249. <page pagename="Exercise 2.60">
  6250. <b>Exercise 2.60</b><br>
  6251. A criticism of the <b>break</b> statement and the <b>continue</b> statement is that each is 
  6252. unstructured. Actually <b>break</b> statements and <b>continue</b> statements can always be 
  6253. replaced by structured statements, although doing so can be awkward. Describe 
  6254. in general how you would remove any <b>break</b> statement from a loop in a 
  6255. program and replace that statement with some structured equivalent. (Hint: The 
  6256. <b>break</b> statement leaves a loop from within the body of the loop. The other way 
  6257. to leave is by failing the loop-continuation test. Consider using in the loop-
  6258. continuation test a second test that indicates "early exit because of a 'break' 
  6259. condition.") Use the technique you developed here to remove the break 
  6260. statement from the program of <a href="^Code::c:s0p10"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.26</a>.<br>
  6261. <foreign  name="answers" url="^Answers::c:s0p37">
  6262.  
  6263. </page>
  6264. <page pagename="Exercise 2.61">
  6265. <b>Exercise 2.61</b><br>
  6266. What does the following program segment do?<br>
  6267. <font size=2><br></font><font size=11><pre>
  6268. for ( i = 1; i <= 5; i++ ) {<p>
  6269.        for ( j = 1; j <= 3; j++ ) {<p>
  6270.             for ( k = 1; k <= 4; k++ )<p>
  6271.                  cout << '*';<p>
  6272.             cout << endl;<p>
  6273.        }<p>
  6274.        cout << endl;<p>
  6275. }<p>
  6276. </pre></font>
  6277.  
  6278. </page>
  6279. <page pagename="Exercise 2.62">
  6280. <b>Exercise 2.62</b><br>
  6281. Describe in general how you would remove any <b>continue</b> statement from a loop 
  6282. in a program and replace that statement with some structured equivalent. Use the 
  6283. technique you developed here to remove the <b>continue</b> statement from the 
  6284. program of <a href="^Code::c:s0p11"> <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.27</a>. <br>
  6285.  
  6286. </page>
  6287. <page pagename="Exercise 2.63">
  6288. <b>Exercise 2.63</b><br>
  6289. (<i>"The Twelve Days of Christmas" Song</i>) Write a program that uses repetition 
  6290. and <b>switch</b> structures to print the song "The Twelve Days of Christmas." One 
  6291. <b>switch</b> structure should be used to print the day (i.e., "First," "Second," etc.). A 
  6292. separate <b>switch</b> structure should be used to print the remainder of each verse.<br>
  6293. <foreign  name="answers" url="^Answers::c:s0p38">
  6294. <br>
  6295.  
  6296. </page>
  6297. <page pagename="Exercise 2.64">
  6298. <b>Exercise 2.64</b><br>
  6299. Exercise 2.64 corresponds to<a href="#s22p0"> Section 2.22</a>, "Thinking About Objects."<br>
  6300. <br>
  6301. Describe in 200 words or less what an automobile is and does. List the nouns 
  6302. and verbs separately. In the text, we stated that each noun may correspond to an 
  6303. object that will need to be built to implement a system, in this case a car. Pick 
  6304. five of the objects you listed and for each list several attributes and several 
  6305. behaviors. Describe briefly how these objects interact with one another and 
  6306. other objects in your description. You have just performed several of the key 
  6307. steps in a typical object-oriented design.<br>
  6308.  
  6309. </page>
  6310. <page pagename="Exercise 2.65">
  6311. <b>Exercise 2.65</b><br>
  6312. <i>(Peter Minuet Problem)</i> Legend has it that in 1626 Peter Minuet purchased 
  6313. Manhattan for $24.00 in barter. Did he make a good investment? To answer this 
  6314. question, modify the compound interest program of<a href="^Code::c:s0p7">  <img src="bckgrnds/icons/code_ico.gif" align=sidebar>Fig. 2.21</a> to begin with a 
  6315. principal of $24.00 and to calculate the amount of interest on deposit if that 
  6316. money had been kept on deposit until this year (372 years through 1998). Run 
  6317. the program with interest rates of 5%, 6%, 7%, 8%, 9% and 10% to observe the 
  6318. wonders of compound interest.<br>
  6319.  
  6320. </page>
  6321. </section>
  6322. <section type=Popup name=Errors title="Common Errors">
  6323. <page>
  6324. Using a keyword as an 
  6325. identifier is a syntax 
  6326. error.<br>
  6327. <br>
  6328.  
  6329. </page>
  6330. <page>
  6331. Forgetting one or both 
  6332. of the braces that 
  6333. delimit a compound 
  6334. statement can lead to 
  6335. syntax errors or logic 
  6336. errors in a program. <br>
  6337. <br>
  6338.  
  6339. </page>
  6340. <page>
  6341. Placing a semicolon 
  6342. after the condition in an 
  6343. <b>if</b> structure leads to a 
  6344. logic error in single-
  6345. selection <b>if</b> structures 
  6346. and a syntax error in 
  6347. double-selection <b>if</b> 
  6348. structures (if the <b>if</b>-part 
  6349. contains an actual body 
  6350. statement). <br>
  6351.  
  6352. </page>
  6353. <page>
  6354. Spelling the keyword 
  6355. <b>while</b> with an 
  6356. uppercase <b>W</b> as in 
  6357. <b>While</b> (remember that 
  6358. C++ is a case-sensitive 
  6359. language) is a syntax 
  6360. error. All of C++'s 
  6361. reserved keywords such 
  6362. as <b>while</b>, <b>if</b>, and <b>else</b> <br>
  6363.  
  6364. </page>
  6365. <page>
  6366. contain only lowercase 
  6367. letters.<br>
  6368. <br>
  6369.  
  6370. </page>
  6371. <page>
  6372. Not providing in the 
  6373. body of a <b>while</b> 
  6374. structure an action that 
  6375. eventually causes the 
  6376. condition in the <b>while</b> 
  6377. to become <b>false</b> 
  6378. normally results in an 
  6379. error called an "infinite 
  6380. loop" in which the <br>
  6381.  
  6382. </page>
  6383. <page>
  6384. repetition structure 
  6385. never terminates.<br>
  6386. <br>
  6387.  
  6388. </page>
  6389. <page>
  6390. If a counter or total is 
  6391. not initialized, the 
  6392. results of your program 
  6393. will probably be 
  6394. incorrect. This is an 
  6395. example of a logic 
  6396. error.<br>
  6397. <br>
  6398.  
  6399. </page>
  6400. <page>
  6401. In a counter-controlled 
  6402. loop, because the loop 
  6403. counter (when counting 
  6404. up by one each time 
  6405. through the loop) is one 
  6406. higher than its last 
  6407. legitimate value (i.e., 
  6408. 11 in the case of 
  6409. counting from 1 to 10), 
  6410. using the counter value <br>
  6411.  
  6412. </page>
  6413. <page>
  6414. in a calculation after the 
  6415. loop is often an off-by-
  6416. one-error.<br>
  6417. <br>
  6418.  
  6419. </page>
  6420. <page>
  6421. Choosing a sentinel 
  6422. value that is also a 
  6423. legitimate data value is 
  6424. a logic error.<br>
  6425. <br>
  6426.  
  6427. </page>
  6428. <page>
  6429. An attempt to divide by 
  6430. zero causes a fatal 
  6431. error.<br>
  6432. <br>
  6433.  
  6434. </page>
  6435. <page>
  6436. Using floating-point 
  6437. numbers in a manner 
  6438. that assumes they are 
  6439. represented precisely 
  6440. can lead to incorrect 
  6441. results. Floating-point 
  6442. numbers are 
  6443. represented only 
  6444. approximately by most 
  6445. computers. <br>
  6446.  
  6447. </page>
  6448. <page>
  6449. Attempting to use the 
  6450. increment or decrement 
  6451. operator on an 
  6452. expression other than a 
  6453. simple variable name, 
  6454. e.g., writing <b>++(x + 1)</b> 
  6455. is a syntax error. <br>
  6456. <br>
  6457.  
  6458. </page>
  6459. <page>
  6460. Because floating-point 
  6461. values may be 
  6462. approximate, 
  6463. controlling counting 
  6464. loops with floating-
  6465. point variables may 
  6466. result in imprecise 
  6467. counter values and 
  6468. inaccurate tests for 
  6469. termination. <br>
  6470.  
  6471. </page>
  6472. <page>
  6473. Using an incorrect 
  6474. relational operator or 
  6475. using an incorrect final 
  6476. value of a loop counter 
  6477. in the condition of a 
  6478. <b>while</b> or <b>for</b> structure 
  6479. can cause off-by-one 
  6480. errors. <br>
  6481. <br>
  6482.  
  6483. </page>
  6484. <page>
  6485. <font size=18>When the control 
  6486. variable of a <b>for</b> 
  6487. structure is initially 
  6488. defined in the initialization section of the 
  6489. <b>for</b> structure header, 
  6490. using the control </font><br>
  6491.  
  6492. </page>
  6493. <page>
  6494. <font size=18>variable after the 
  6495. body of the structure 
  6496. is a syntax error.</font><br>
  6497. <font size=18></font><br>
  6498.  
  6499. </page>
  6500. <page>
  6501. Placing a semicolon 
  6502. immediately to the right 
  6503. of the right parenthesis 
  6504. of a <b>for</b> header makes 
  6505. the body of that <b>for</b> 
  6506. structure an empty 
  6507. statement. This is 
  6508. normally a logic error.<br>
  6509. <br>
  6510.  
  6511. </page>
  6512. <page>
  6513. Using commas instead 
  6514. of the two required 
  6515. semicolons in a <b>for</b> 
  6516. header is a syntax error.<br>
  6517. <br>
  6518.  
  6519. </page>
  6520. <page>
  6521. Not using the proper 
  6522. relational operator in 
  6523. the loop-continuation 
  6524. condition of a loop that 
  6525. counts downwards 
  6526. (such as incorrectly 
  6527. using <b>i <= 1</b> in a loop 
  6528. counting down to 1) is 
  6529. usually a logic error 
  6530. that will yield incorrect <br>
  6531.  
  6532. </page>
  6533. <page>
  6534. results when the 
  6535. program runs.<br>
  6536. <br>
  6537.  
  6538. </page>
  6539. <page>
  6540. Forgetting to include 
  6541. the <b>math.h</b> file in a 
  6542. program that uses math 
  6543. library functions is a 
  6544. syntax error.<br>
  6545. <br>
  6546.  
  6547. </page>
  6548. <page>
  6549. Omitting the space 
  6550. between the word <b>case</b> 
  6551. and the integral value 
  6552. being tested in a <b>switch</b> 
  6553. structure can cause a 
  6554. logic error. For 
  6555. example, writing 
  6556. <b>case3:</b> instead of 
  6557. writing <b>case 3:</b> simply 
  6558. creates an unused label <br>
  6559.  
  6560. </page>
  6561. <page>
  6562. (we will say more about 
  6563. this in Chapter 18). The 
  6564. problem is that the 
  6565. <b>switch</b> structure will 
  6566. not perform the 
  6567. appropriate actions 
  6568. when the <b>switch</b>'s 
  6569. controlling expression 
  6570. has a value of 3.<br>
  6571.  
  6572. </page>
  6573. <page>
  6574. Forgetting a <b>break</b> 
  6575. statement when one is 
  6576. needed in a <b>switch</b> 
  6577. structure is a logic 
  6578. error.<br>
  6579. <br>
  6580.  
  6581. </page>
  6582. <page>
  6583. Not processing newline 
  6584. and other whitespace 
  6585. characters in the input 
  6586. when reading 
  6587. characters one at a time 
  6588. can cause logic errors.<br>
  6589. <br>
  6590.  
  6591. </page>
  6592. <page>
  6593. Providing identical case 
  6594. labels in a <b>switch</b> 
  6595. structure is a syntax 
  6596. error.<br>
  6597. <br>
  6598.  
  6599. </page>
  6600. <page>
  6601. Infinite loops are 
  6602. caused when the loop-
  6603. continuation condition 
  6604. in a <b>while</b>, <b>for</b>, or <b>do/
  6605. while</b> structure never 
  6606. becomes <b>false</b>. To 
  6607. prevent this, make sure 
  6608. the value of the 
  6609. condition does change 
  6610. somewhere in the <br>
  6611.  
  6612. </page>
  6613. <page>
  6614. header or body of the 
  6615. loop so the condition 
  6616. can eventually become 
  6617. <b>false</b>.<br>
  6618. <br>
  6619.  
  6620. </page>
  6621. <page>
  6622. Although <b>3 < x < 7</b> is a 
  6623. mathematically correct 
  6624. condition, it does not 
  6625. evaluate correctly in 
  6626. C++. Use <tt><b>(</b></tt> <b>3 < x && x 
  6627. < 7</b> <tt><b>)</b></tt> to get the proper 
  6628. evaluation in C++.<br>
  6629. <br>
  6630.  
  6631. </page>
  6632. <page>
  6633. In expressions using 
  6634. operator <b>&&</b>, it is 
  6635. possible that a 
  6636. condition--we will call 
  6637. this the dependent 
  6638. condition--may require 
  6639. another condition to be 
  6640. <b>true</b> for it to be 
  6641. meaningful to evaluate 
  6642. the dependent <br>
  6643.  
  6644. </page>
  6645. <page>
  6646. condition. In this case, 
  6647. the dependent condition 
  6648. should be placed after 
  6649. the other condition or 
  6650. an error might occur. <br>
  6651. <br>
  6652.  
  6653. </page>
  6654. <page>
  6655. Using operator<b> ==</b> for 
  6656. assignment, or using 
  6657. operator <b>=</b> for equality, 
  6658. are logic errors.<br>
  6659. <br>
  6660.  
  6661. </page>
  6662. </section>
  6663. <section type=Popup name=Engineer title="Engineering">
  6664. <page>
  6665. Any C++ program we 
  6666. will ever build can be 
  6667. constructed from only 
  6668. seven different types of 
  6669. control structures (<b>if</b>, <b>if/
  6670. else</b>, <b>switch</b>, <b>while</b>, <b>do/
  6671. while</b> and <b>for</b>) 
  6672. combined in only two 
  6673. ways (control-structure <br>
  6674.  
  6675. </page>
  6676. <page>
  6677. stacking and control 
  6678. structure nesting).<br>
  6679. <br>
  6680.  
  6681. </page>
  6682. <page>
  6683. A compound statement 
  6684. can be placed anywhere 
  6685. in a program that a 
  6686. single statement can be 
  6687. placed. <br>
  6688. <br>
  6689.  
  6690. </page>
  6691. <page>
  6692. Just as a compound 
  6693. statement can be placed 
  6694. anywhere a single 
  6695. statement can be 
  6696. placed, it is also 
  6697. possible to have no 
  6698. statement at all, i.e., the 
  6699. empty statement. The 
  6700. empty statement is 
  6701. represented by placing <br>
  6702.  
  6703. </page>
  6704. <page>
  6705. a semicolon (<b>;</b>) where a 
  6706. statement would 
  6707. normally be.<br>
  6708. <br>
  6709.  
  6710. </page>
  6711. <page>
  6712. Many programs can be 
  6713. divided logically into 
  6714. three phases: an 
  6715. initialization phase that 
  6716. initializes the program 
  6717. variables; a processing 
  6718. phase that inputs data 
  6719. values and adjusts 
  6720. program variables 
  6721. accordingly; and a <br>
  6722.  
  6723. </page>
  6724. <page>
  6725. termination phase that 
  6726. calculates and prints the 
  6727. final results. <br>
  6728. <br>
  6729.  
  6730. </page>
  6731. <page>
  6732. Each refinement, as 
  6733. well as the top itself, is 
  6734. a complete 
  6735. specification of the 
  6736. algorithm; only the 
  6737. level of detail varies.<br>
  6738. <br>
  6739.  
  6740. </page>
  6741. <page>
  6742. The programmer 
  6743. terminates the top-
  6744. down, stepwise 
  6745. refinement process 
  6746. when the pseudocode 
  6747. algorithm is specified 
  6748. in sufficient detail for 
  6749. the programmer to be 
  6750. able to convert the 
  6751. pseudocode to C++. <br>
  6752.  
  6753. </page>
  6754. <page>
  6755. Implementing the C++ 
  6756. program is then 
  6757. normally 
  6758. straightforward. <br>
  6759. <br>
  6760.  
  6761. </page>
  6762. <page>
  6763. Experience has shown 
  6764. that the most difficult 
  6765. part of solving a 
  6766. problem on a computer 
  6767. is developing the 
  6768. algorithm for the 
  6769. solution. Once a correct 
  6770. algorithm has been 
  6771. specified, the process 
  6772. of producing a working <br>
  6773.  
  6774. </page>
  6775. <page>
  6776. C++ program from the 
  6777. algorithm is normally 
  6778. straightforward. <br>
  6779. <br>
  6780.  
  6781. </page>
  6782. <page>
  6783. Many experienced 
  6784. programmers write 
  6785. programs without ever 
  6786. using program 
  6787. development tools like 
  6788. pseudocode. These 
  6789. programmers feel that 
  6790. their ultimate goal is to 
  6791. solve the problem on a 
  6792. computer, and that <br>
  6793.  
  6794. </page>
  6795. <page>
  6796. writing pseudocode 
  6797. merely delays the 
  6798. production of final 
  6799. outputs. Although this 
  6800. may work for simple 
  6801. and familiar problems, 
  6802. it can lead to serious 
  6803. errors and delays on 
  6804. large, complex projects. <br>
  6805. <br>
  6806.  
  6807. </page>
  6808. <page>
  6809. Placing a semicolon 
  6810. immediately after a <b>for</b> 
  6811. header is sometimes 
  6812. used to create a so-
  6813. called delay loop. Such 
  6814. a <b>for</b> loop with an 
  6815. empty body still loops 
  6816. the indicated number of 
  6817. times doing nothing 
  6818. other than the counting. <br>
  6819.  
  6820. </page>
  6821. <page>
  6822. You might use a delay 
  6823. loop, for example, to 
  6824. slow down a program 
  6825. that is producing 
  6826. outputs on the screen 
  6827. too quickly for you to 
  6828. read them.<br>
  6829.  
  6830. </page>
  6831. <page>
  6832. There is a tension 
  6833. between achieving 
  6834. quality software 
  6835. engineering and 
  6836. achieving the best 
  6837. performing software. 
  6838. Often, one of these 
  6839. goals is achieved at the 
  6840. expense of the other.<br>
  6841. <br>
  6842.  
  6843. </page>
  6844. </section>
  6845.  
  6846. <section type=Popup name=AppletPopup title="Applet Examples">
  6847. <page>
  6848. This chapter does not contain any Applet Examples.
  6849. </page>
  6850. </section>
  6851. </chapter>
  6852. </html>
  6853. </html>
  6854.